Вниз
Скачать: CL | DM;

CM_MOUSEENTER   Найти похожие ветки 

 
Litt   (2011-09-23 18:42) [0]

Здравствуйте.
У меня возникла проблема в следующем:
Навожу на котрол курсор, зажимаю ЛКМ. Перевожу на другой и отпускаю. При этом второй контрол не получает CM_MOUSEENTER и соответственно CM_MOUSELEAVE.
Как ее решить?

Пытался в WMLButtonUp добавить эту строку:Parent.Perform(CM_MOUSEENTER, 0, 0);после чего стало обрабатываться CM_MOUSELEAVE, но ENTER так и не было.


 
Rouse_ ©   (2011-09-23 18:48) [1]

Второй контрол, это тот на который ты перевел мыш или тот на котором отпустил кнопку?


 
Dimka Maslov ©   (2011-09-23 19:51) [2]

При нажатии на кнопку над контролом он получает ВСЕ события от мыши до тех пор, пока кнопка не будет отпущена. Так работает выньда.


 
Puw   (2011-09-23 20:25) [3]

Rouse_, зажал на первом, отпустил на втором.

Я так понял, что все эти CM_MOUSEENTER контролирует окно, но не понял в каких случаях оно отправляется.
Наверное, нужна функция, которая получает контрол из под мышки во время ее движения, но где она?


 
Dimka Maslov ©   (2011-09-23 20:37) [4]

СМ_MOUSEENTER отправляется контролу когда на него находит курсор, но не через очередь сообщений, а через метод Perform, ибо это внутренее сообщение VCL.

А функция, которая получает контрол по координатам называется TWinControl.ControlAtPos


 
Puw   (2011-09-23 21:56) [5]

Упростил TWinControl.ControlAtPos до поиска только по своему типу, отсылаю ему CM_MOUSEENTER и все работает.

Всем спасибо.



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

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.005 c
2-1317030684
Gu
2011-09-26 13:51
2012.01.01
Передать commandline


15-1316118584
Юрий
2011-09-16 00:29
2012.01.01
С днем рождения ! 16 сентября 2011 пятница


6-1249372147
Ливр
2009-08-04 11:49
2012.01.01
проблема: в Webbrowser е проблемы с вводом с клавиатуры


3-1269448285
учителка
2010-03-24 19:31
2012.01.01
удаление записи из записи


15-1312403395
Юрий
2011-08-04 00:29
2012.01.01
С днем рождения ! 4 августа 2011 четверг




   Наверх