Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.10.21;
Скачать: CL | DM;

Вниз

Поведение кнопки 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.022 c
2-1191190477
Gringoire
2007-10-01 02:14
2007.10.21
Наблюдение за нажатием клавиш


1-1186573487
NKT
2007-08-08 15:44
2007.10.21
Приложение SDI - меню и взаимодействие форм


15-1190195376
Beastie Boys
2007-09-19 13:49
2007.10.21
у дизайнеров хорошая фантазия?


1-1186634915
Dr. Andrew
2007-08-09 08:48
2007.10.21
Как скопировать содержимое ячейки ElXThree в Bitmap?


15-1190451190
РВА
2007-09-22 12:53
2007.10.21
Где взять ключ для Turbo Delphi