Форум: "Начинающим";
Текущий архив: 2007.10.21;
Скачать: [xml.tar.bz2];
ВнизПоведение кнопки TToolButton со стилем tbsDropDown Найти похожие ветки
← →
Uchenik (2007-09-25 11:52) [0]Столкнулся с проблемой. На ToolBar есть кнопка со стилем tbsDropDown. У неё есть выпадающее меню и обработчик OnClick. Если щёлкнуть по кнопке справа, то выпадает меню. Если щёлкнуть слева, то выполняется OnClick. Если щёлкать ближе к ценру, то и меню не выпадает, и OnClick не выполняется. Нажатие не даёт эффекта. А должен выполняться OnClick. В чём проблема? Я уже думаю, что это баг VCL. Что делать?
← →
Kolan © (2007-09-25 15:05) [1]> У неё есть выпадающее меню
Ты точно DropDownMenu назначил?
← →
Palladin © (2007-09-25 15:35) [2]Popup скорее всего назначил...
← →
Leonid Troyanovsky © (2007-09-25 16:03) [3]
> Uchenik (25.09.07 11:52)
> В чём проблема? Я уже думаю, что это баг VCL.
Видимо, речь о том, что при попадании на "границу" в 1 пкс,
когда "утопают" обе кнопочки, не срабатывает OnClick.
Дейс-но, это баг.
Неправильно рассчитывается ширина кнопки,
для которой нужно пропустить ей
WM_LBUTTONDOWN, WM_LBUTTONDBLCLK
См. TToolBar.WndProc
Кста, в D6 такого не было.
Дома подумаем, как фиксить.
--
Regards, LVT.
← →
AlexanderMS © (2007-09-25 16:34) [4]
> при попадании на "границу" в 1 пкс,
Если "пкс" = "пиксель", то там гораздо больше. DropDownMenu назначил, Popup - нет, хотя это роли не играет.
← →
Leonid Troyanovsky © (2007-09-25 17:53) [5]
> AlexanderMS © (25.09.07 16:34) [4]
> Если "пкс" = "пиксель", то там гораздо больше.
На моем XP, server 2003 (темы не вкл.) - именно один пиксель.
Покажи текст dfm юнита, достаточный для воспроизведения.
--
Regards, LVT.
← →
AlexanderMS © (2007-09-25 19:54) [6]У меня XP Home, и OnClick срабатывает в районе кнопки, составляющем 50% от нужной "площади срабатывания".
В dfm у кнопки есть толькоLeft
иTop
. Размеры кнопок изменить не получается. Не обращайте внимания, что здесьTTntToolBar
, он всё равно наследникTToolBar
, у которого та же проблема.object ToolBar: TTntToolBar
Left = 0
Top = 0
Width = 792
Height = 22
AutoSize = True
ButtonWidth = 26
Caption = "ToolBar"
EdgeBorders = []
EdgeInner = esNone
EdgeOuter = esRaised
Flat = True
Images = ImageList
TabOrder = 0
object TBNewQuestion: TTntToolButton
Left = 86
Top = 0
Caption = "ANewDefaultQuestion"
DropdownMenu = NewQuestionMenu
ImageIndex = 6
Style = tbsDropDown
OnClick = ANewDefaultQuestionExecute
end
Автор ветки я, просто задавал вопрос со школьного компьютера и не переименовал ник.
← →
Leonid Troyanovsky © (2007-09-25 19:54) [7]
> Leonid Troyanovsky © (25.09.07 16:03) [3]
> Дома подумаем, как фиксить.
Например, (для D6+)
type
TForm1 = class(TForm)
ToolBar1: TToolBar;
ToolButton1: TToolButton;
PopupMenu1: TPopupMenu;
N11: TMenuItem;
ToolButton2: TToolButton;
procedure ToolButton1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ToolButton2Click(Sender: TObject);
private
{ Private declarations }
oldproc: TWndMethod;
procedure newproc(var message: TMessage);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Oldproc := ToolBar1.WindowProc;
ToolBar1.WindowProc := newproc;
end;
procedure TForm1.newproc(var message: TMessage);
var
control : TControl;
begin
case message.Msg of
WM_LBUTTONDOWN, WM_LBUTTONDBLCLK:
begin
Control := Toolbar1.ControlAtPos(SmallPointToPoint(TWMMouse(Message).Pos), False);
if Assigned(Control) then
with TToolButton(Control) do
if (GetComCtlVersion >= ComCtlVersionIE4) and
(TWMMouse(Message).XPos = Left + Width - 14) then
dec(TWMMouse(Message).XPos);
end;
end;
oldproc(message);
end;
--
Regards, LVT.
← →
Leonid Troyanovsky © (2007-09-25 20:00) [8]
> AlexanderMS © (25.09.07 19:54) [6]
> не получается. Не обращайте внимания,
Хорошее дело, т.е., ты предлагаешь переименовывать мне.
Я ж просил "достаточный для воспроизведения".
Т.е., я вставил б себе и испытал.
И нах тут TTntToolBar, давай по сабжу
Исправляйся.
Кста, про XP я уже сказал. Отключи темы, испытай,
пока эффект заметил только на полоске в 1 пиксель.
--
Regards, LVT.
← →
AlexanderMS © (2007-09-25 20:37) [9]Leonid Troyanovsky, большое спасибо! Всё заработало!
> Хорошее дело, т.е., ты предлагаешь переименовывать мне.
> Я ж просил "достаточный для воспроизведения".
> Т.е., я вставил б себе и испытал.
> И нах тут TTntToolBar, давай по сабжу
Прошу прощения. Тут я, правда, не подумал...
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.10.21;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.045 c