-
На панели расположен ряд CheckBox-ов, RadioButton-ов и ComboBox-ов. У CheckBox-ов и RadioButton-ов имеется событие onMouseMove. Подскажите как мне определить, что курсор мыши находится над одним из ComboBox-ов (событие onMouseMove у этого компонента/контрола отсутствует)? Спасибо
-
property OnMouseEnter;
property OnMouseLeave;
-
> Игорь Шевченко © (07.08.17 14:35) [1] > property OnMouseEnter; > property OnMouseLeave;
Если я правильно понял (не совсем уверен), предлагается создать наследника TComboBox и добавить два необходимых события OnMouseLeave и OnMouseEnter. В моей ситуации это нежелательно. Имеется довольно "пожилой" проект (2001 г.р.), я продолжаю его сопровождать, мой вопрос был про стандартные TComboBox-сы. В любом случае спасибо, что откликнулись
-
Нет, у TComboBox есть эти события, на них надо написать обработчики, при срабатывании OnMouseEnter курсор мыши будет в окне ComboBox, а при срабатывании OnMouseLeave курсор мыши покинет окно.
-
Попытки с использованием ControlAtPos результата не дали. Видимо, я что-о недопонимаю ...:(
-
> Игорь Шевченко © (07.08.17 20:47) [3] > Нет, у TComboBox есть эти события, на них надо написать > обработчики, при срабатывании OnMouseEnter курсор мыши будет > в окне ComboBox, а при срабатывании OnMouseLeave курсор > мыши покинет окно.
Уточню, WinXP, D5 Этих событий у TComboBox нет
-
там три handle походу, Edit, list и еще что-то FEditHandle: HWnd; FListHandle: HWnd; FDropHandle: HWnd;
идея така, перехватываем тут
TComboBox = class(StdCtrls.TComboBox) public procedure ComboWndProc(var Message: TMessage; ComboWnd: HWnd; ComboProc: Pointer); override; end;
TForm1 = class(TForm) cb1: TComboBox; mmo1: TMemo; private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
{ TComboBox }
procedure TComboBox.ComboWndProc(var Message: TMessage; ComboWnd: HWnd; ComboProc: Pointer); begin Form1.mmo1.Lines.Add(IntToStr(Message.Msg)); inherited;
end;
только в таком виде ошибка при закрытии, при разрушении надо аккуратнее подумать
-
> Smile © (07.08.17 20:50) [5] > > > Игорь Шевченко © (07.08.17 20:47) [3] > > Нет, у TComboBox есть эти события, на них надо написать > > обработчики, при срабатывании OnMouseEnter курсор мыши > будет > > в окне ComboBox, а при срабатывании OnMouseLeave курсор > > мыши покинет окно. > > Уточню, WinXP, D5 > Этих событий у TComboBox нет
Хуже всего что эти компоненты лежат на панели. Лежали б они на форме - проблем бы не было в Д5.
-
> Германн © (08.08.17 01:45) [7] > Хуже всего что эти компоненты лежат на панели. Лежали б > они на форме - проблем бы не было в Д5.
А, конкретно, что это бы изменило? Вряд ли появилось бы событие OnMouseEnter
-
-
> Уточню, WinXP, D5
Извиняюсь. Тогда имитировать в Application.OnMessage - туда все сообщения из очереди ввода приходят, в том числе и мышиные
-
> Leonid Troyanovsky © (08.08.17 09:39) [9]
Спасибо, это именно то, что мне нужно!
-
а еще, в целях образования, можешь посмотреть HSHintComboBox
> { > Наследник TComboBox, показывающий Hint для строки в ListBox'овой части, > не видимой целиком. > > Автор: Игорь Шевченко > Дата создания: 13.04.2002 > ......
-
-
> Leonid Troyanovsky © (08.08.17 09:39) [9] > > > > Германн © (08.08.17 01:45) [7] > > > Хуже всего что эти компоненты лежат на панели. > > А чего плохого в панели? > Я, вроде, не раз уже рассказывал. >
Плохого ничего нет. Только кода нужно много писать. Да ещё и не очень понятного большинству вопрошающих на форумах по Дельфи.
|