Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.043 c
15-1190382560
мастерПакость
2007-09-21 17:49
2007.10.21
проблемы с HTML


6-1171959552
santey
2007-02-20 11:19
2007.10.21
Как установить статический ип на сетевом адаптере


1-1186483022
OlegM
2007-08-07 14:37
2007.10.21
Незакрываються динамически созданные Panel


2-1190800377
O.O
2007-09-26 13:52
2007.10.21
Как удалить файл с атрибутом "только для чтения"


15-1190181663
oldman
2007-09-19 10:01
2007.10.21
Все программисты знают, что компьютер - железный глупый ящик





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский