Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];

Вниз

уход курсора   Найти похожие ветки 

 
apic ©   (2006-09-28 07:42) [0]

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


 
Ketmar ©   (2006-09-28 08:07) [1]

если "в том числе и формы" -- от по таймеру проверять, где был и где сейчас.


 
apic ©   (2006-09-28 08:16) [2]

Фиг с ней с формой, как от дочерних элементов без таймера, сомневаюсь, что в сторонних компонентах используется таймер


 
Ketmar ©   (2006-09-28 08:17) [3]

CM_MOUSEENER, CM_MOUSELEAVE. но лучше -- таймер, потому что иногда эти события могут и не приходить.


 
apic ©   (2006-09-28 08:20) [4]

Слушай, чайник я по ходу, обработчики под WM_ писал, а что такое CM_, и как с ним работать не знаю, если не жалко времени, можно не большой пример?


 
zamtmn ©   (2006-09-28 08:33) [5]

>>если "в том числе и формы" -- от по таймеру проверять, где был и где сейчас.
таймер тут как кобыле пятая нога.
лучше ченить вроде такого
WM_MouseMove:begin
     if (handle<>lastmousehandle) and (lastmousehandle<>0) then
     begin
            sdmessage(lastmousehandle,MY_WM_MOUSELAVE,0,0);
            sdmessage(handle,MY_WM_MOUSEENTER;
            lastmousehandle:=handle;
    end;
   MouseMove(wparam,LOWord(lParam),HIWord(lParam),r);
                       end;


 
apic ©   (2006-09-28 08:44) [6]

извини, но ничего не понял


 
zamtmn ©   (2006-09-28 08:50) [7]

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


 
apic ©   (2006-09-28 09:04) [8]

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


 
Ketmar ©   (2006-09-28 09:32) [9]

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


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

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


 
Ketmar ©   (2006-09-28 10:27) [11]

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


 
zamtmn ©   (2006-09-28 10:32) [12]

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


 
zamtmn ©   (2006-09-28 10:33) [13]

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


 
Ketmar ©   (2006-09-28 10:39) [14]

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

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


 
zamtmn ©   (2006-09-28 10:47) [15]

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


 
zamtmn ©   (2006-09-28 10:49) [16]

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


 
Ketmar ©   (2006-09-28 11:15) [17]

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


 
zamtmn ©   (2006-09-28 11:24) [18]

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


 
Ketmar ©   (2006-09-28 11:42) [19]

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

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


 
zamtmn ©   (2006-09-28 11:57) [20]

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


 
Ketmar ©   (2006-09-28 12:12) [21]

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


 
zamtmn ©   (2006-09-28 12:16) [22]

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


 
pasha_golub ©   (2006-09-28 12:19) [23]

Вообще-то, можно подписаться на сообщения 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_ сообщения (Кетмар прав) не всегда и везде приходят.


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

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


 
zamtmn ©   (2006-09-28 12:41) [25]

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


 
Ketmar ©   (2006-09-28 12:44) [26]

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

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



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.05 c
1-1159151423
dreamse
2006-09-25 06:30
2006.11.05
Управление свойством компонента


5-1142499037
Arm79
2006-03-16 11:50
2006.11.05
ошибка при обращении к Parameters наследника TADOStoredProc


15-1161020542
55_Ald
2006-10-16 21:42
2006.11.05
Как защитить dll от несанкционированного копирования?


2-1161366808
имя
2006-10-20 21:53
2006.11.05
My Proxy 7.56


2-1161170827
pkm
2006-10-18 15:27
2006.11.05
Объясните смысл ошибки.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский