Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

уход курсора [D7, Win95/98, Win2k, WinXP]


Страницы:   1 2

apic ©   (2006-09-28 07:42:00) 

Как мне перехватить событи ухода курсора мыши с какого-либо компонента, в том числе и формы. Есть компоненты сторонних разработчиков но мне нужно без них.


Ketmar   (2006-09-28 12:44:00) [1]

>[23] pasha_golub(c) 28-Sep-2006, 12:19
>Вообще-то, можно подписаться на сообщения
>WM_MOUSELEAVE & WM_MOUSEHOVER.
можно. но тогда уж лучше хук. %-)

>[24] Игорь Шевченко(c) 28-Sep-2006, 12:21
>SetCapture/ReleaseCapture - просто и надежно
угу. только кнопочки перестанут нажиматься. или начнётся свистопляска с перекидкой захватов.


zamtmn   (2006-09-28 12:41:00) [2]

>>Вообще-то, можно подписаться на сообщения WM_MOUSELEAVE & WM_MOUSEHOVER. В MSDN описано
TrackMouseEvent в справке D7 написано что работает только начиная с WinNT поэтому никогда не использовал, в мсдн говорится что начиная с Win98, надо будет попробовать:)
>> SetCapture/ReleaseCapture - просто и надежно
если сказать  SetCapture/ReleaseCapture!, то да просто и надежно, а если привести пример то наверно появятся вопросы по простоте и надежности:)


Игорь Шевченко   (2006-09-28 12:21:00) [3]

SetCapture/ReleaseCapture - просто и надежно


pasha_golub   (2006-09-28 12:19:00) [4]

Вообще-то, можно подписаться на сообщения WM_MOUSELEAVE & WM_MOUSEHOVER. В MSDN описано: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/mouseinput/mouseinputreference/mouseinputmessages/wm_mouseleave.asp

CM_ сообщения (Кетмар прав) не всегда и везде приходят.


zamtmn   (2006-09-28 12:16:00) [5]

>>сложнее. и ненадёжней. представь ситуацию: мышь резку уехала за
>>форму. никто на форме никаких WM_MOUSEMOVE не получил, и последний
>>контрол, над которым была мышь, так и не понял, что она уже давно уехала.
по моему это подпадает под ситуацию из [2] "Фиг с ней с формой" если мышь остается на форме то всё сработает


Ketmar   (2006-09-28 12:12:00) [6]

>[20] zamtmn(c) 28-Sep-2006, 11:57
>мне проще, тебе видимо сложнее:) но это надежней.
сложнее. и ненадёжней. представь ситуацию: мышь резку уехала за форму. никто на форме никаких WM_MOUSEMOVE не получил, и последний контрол, над которым была мышь, так и не понял, что она уже давно уехала.


zamtmn   (2006-09-28 11:57:00) [7]

да придется всем повесить на ОnMouseMove()
>>ты хочешь сказать, что это проще одного таймера?
мне проще, тебе видимо сложнее:) но это надежней.
>>а насчёт "загружать систему"... даже на моём pIII/600 с таймером в 50 мс система не загружется.
но лишняя работа производится и лишний компонент используется.
Вообще этим вопросом не замарачивался, всегда делал как в [5], и соглошусь с [2] по поводу сторонних компонент


Ketmar   (2006-09-28 11:42:00) [8]

>[18] zamtmn(c) 28-Sep-2006, 11:24
>поясни почему?
см. [9]. WM_MOUSEMOVE приходит далеко не всем контролам сразу. и вовсе не главной форме. повесь на OnMouseMove() обработчик, и поелозь мышью. увидишь, что как только мышь ушла с компонента, событие вызываться перестало. т.е. перехватчик WM_MOUSEMOVE надо вешать на все контролы формы. ты хочешь сказать, что это проще одного таймера?

а насчёт "загружать систему"... даже на моём pIII/600 с таймером в 50 мс система не загружется.


zamtmn   (2006-09-28 11:24:00) [9]

>>как я уже говорил, что WM_MOUSEMOVE -- не тот вариант
поясни почему?


Ketmar   (2006-09-28 11:15:00) [10]

ну, тогда вообще лучше хуками. потому как я уже говорил, что WM_MOUSEMOVE -- не тот вариант. код с хуками проще.
вот и третий способ. %-)


zamtmn   (2006-09-28 10:49:00) [11]

и вообще, что за меренья пиписьками с переходами на личности, человеку предложили 2 способа, пусть выберает


zamtmn   (2006-09-28 10:47:00) [12]

>>а это зависит от того, насколько оперативно программа должна реагировать.
я не претендую на супероптимальность моего способа, но то что он сработает всегда вне зависимости от скорости шевеленья мышки и не будет лишний раз грузить систему когда мышка не шевелится а таймер работает, говорит в его пользу


Ketmar   (2006-09-28 10:39:00) [13]

>[12] zamtmn(c) 28-Sep-2006, 10:32
>но если нужно приход\уход, то он не нужен
конечно. хуки, видимо, считаются более простым выходом. ага?

>[13] zamtmn(c) 28-Sep-2006, 10:33
>кстати какой период для таймера вы предложите
>использовать?
а это зависит от того, насколько оперативно программа должна реагировать.


zamtmn   (2006-09-28 10:33:00) [14]

кстати какой период для таймера вы предложите использовать?


zamtmn   (2006-09-28 10:32:00) [15]

>>упорное желание решать задачи неоптимальным
тоже самое могу сказать про таймер. вообщето он применяется когда нужно или засечь время или выждать определенный период. соглашусь с его примененьем если нужно посчитать скорость движенья мыши:), но если нужно приход\уход, то он не нужен


Ketmar   (2006-09-28 10:27:00) [16]

>[10] zamtmn(c) 28-Sep-2006, 10:18
>что вас заставляет сомневаться в моих умственных
>способностях?
упорное желание решать задачи неоптимальным и без нужды усложнённым способом.


zamtmn   (2006-09-28 10:18:00) [17]

>>вы, сударь, или неумны, или не читаете сабжа, или не в курсе
что вас заставляет сомневаться в моих умственных способностях? идея юзать таймер везде где только можно?
>>тому же, данный подход всё равно не решает "в том числе и формы"
вы не заметили [2]?


Ketmar   (2006-09-28 09:32:00) [18]

>[5] zamtmn(c) 28-Sep-2006, 08:33
>>>если "в том числе и формы" -- от по таймеру
>проверять, где был и где сейчас.
>таймер тут как кобыле пятая нога.
вы, сударь, или неумны, или не читаете сабжа, или не в курсе, кому и когда приходит WM_MOUSEMOVE.
или вы предлагаете каждомукопмоненту-наследнику TWinControl вешать этот обработчик? а не проще один таймер положить?
к тому же, данный подход всё равно не решает "в том числе и формы".


apic   (2006-09-28 09:04:00) [19]

Спасибо! Другой не стал бы объяснять... Теперь более понятно!


zamtmn   (2006-09-28 08:50:00) [20]

запоминаешь в глобальной переменной предидущего влабельца мыши,
в MouseMove смотришь если текущий контрол<>предидущему влабельцу мыши, вызываешь у него mouse_leave, у себя mouse_enter, обновляешь предидущего владельца мыши.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо