Управление MouseOver через Hint
|
"Прав не тот, кто прав, а тот, у кого больше прав" - подумал администратор, и посносил все права пользователям.
|
Cуществует ли какой-либо способ отловить момент попадания
курсора в область компонента? А его уход оттуда? Мне необходимо убедиться в
видимости элемента управления под курсором мыши и совершить над ним некоторые
действия.
Вы можете приспособить для этих целей метод OnHint класса TApplication.
Данный метод вызывается при перемещении мыши над компонентом и, обычно в ответ
на это, становится видимой всплывающая подсказка, а заголовок компонента
присваивается величине Application.Hint. Тем не менее вы НЕ должны пользоваться
этим решением. Зато при наступлении события вы можете проверять величину Hint
для определения того, над каким компонентом в данный момент находится курсор
мыши. Стоящая попытка, во всяком случае!
Вот некоторые детали для усвоения идеи. Я расположил на форме компоненты
button, edit и label, установил их свойство Hint соответственно в 'Button',
'Edit' и 'Label', и создал несколько их дубликатов. Далее я добавил компонент
TRadioGroup, содержащий три элемента, Button, Edit и Label. И, наконец, я
реализовал метод приложения OnHint следующим образом:
procedure TForm1.AppOnHint(Sender: TObject);
begin
with Application do
if Hint = 'Button' then
RadioGroup1.ItemIndex := 0
else if Hint = 'Edit' then
RadioGroup1.ItemIndex := 1
else if Hint = 'Label' then
RadioGroup1.ItemIndex := 2
else
RadioGroup1.ItemIndex := -1;
end;
|
Теперь, во время перемещения мыши над формой, соответствующий элемент
RadioGroup показывает над чем в данный момент времени находится курсор мыши.
Теперь развивайте идею по своему усмотрению!
- Neil
Событие OnShowHint в данном контексте, по-моему мнению, должно подойти
больше, поскольку HintControl уже доступен в записи THintInfo объекта
TShowHintEvent. К тому же, с помощью него гораздо удобнее производить проверку
типа и др.... и вы все еще можете при желании использовать всплывающие подсказки
по назначению.
-= Gary =- (TurboPower Software)
О да! Эта идея еще интереснее. И как я ее пропустил! Хотя, с другой стороны,
получение информации теперь будет связано с задержкой, обозначенной величиной
HintPause. Конечно можно установить HintPause в 0... Главное, что это работает.
Классная идея!
- Neil
|