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 [000588]
Nomadic советует:
procedure TForm1.Timer1Timer(Sender: TObject); begin mouse_event(MOUSEEVENTF_MOVE, Random(21) - 10, Random(21) - 10, 0, 0); end; |
[001745]