![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
CM_MOUSEENTER [D7, XP]
Litt © (2011-09-23 18:42:00)Здравствуйте.
У меня возникла проблема в следующем:
Навожу на котрол курсор, зажимаю ЛКМ. Перевожу на другой и отпускаю. При этом второй контрол не получает CM_MOUSEENTER и соответственно CM_MOUSELEAVE.
Как ее решить?
Пытался в WMLButtonUp добавить эту строку:Parent.Perform(CM_MOUSEENTER, 0, 0);после чего стало обрабатываться CM_MOUSELEAVE, но ENTER так и не было.
Puw (2011-09-23 21:56:00) [1]Упростил
TWinControl.ControlAtPosдо поиска только по своему типу, отсылаю емуCM_MOUSEENTERи все работает.
Всем спасибо.
Dimka Maslov (2011-09-23 20:37:00) [2]СМ_MOUSEENTER отправляется контролу когда на него находит курсор, но не через очередь сообщений, а через метод Perform, ибо это внутренее сообщение VCL.
А функция, которая получает контрол по координатам называется TWinControl.ControlAtPos
Puw (2011-09-23 20:25:00) [3]Rouse_, зажал на первом, отпустил на втором.
Я так понял, что все эти CM_MOUSEENTER контролирует окно, но не понял в каких случаях оно отправляется.
Наверное, нужна функция, которая получает контрол из под мышки во время ее движения, но где она?
Dimka Maslov (2011-09-23 19:51:00) [4]При нажатии на кнопку над контролом он получает ВСЕ события от мыши до тех пор, пока кнопка не будет отпущена. Так работает выньда.
Rouse_ (2011-09-23 18:48:00) [5]
Второй контрол, это тот на который ты перевел мыш или тот на котором отпустил кнопку?