![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
CM_MouseEnter & CM_MouseLeave [D6, WinME, Win2k]
SB.John © (2002-03-22 13:55:00)Когда мышь находится над моим компонентом хочу менять ее курсор.
Нашел два сообщения CM_MouseEnter & CM_MouseLeave. Но это сообщения не WinAPI а дельфийские. в WinAPI есть WM_MouseLEave, а вот WM_MouseEnter нет. Наверняка есть какой-то аналог. Кто подскажет?
SB.John (2002-03-26 08:56:00) [1]Юрий Зотов ,Dimka Maslov, спасибо -все оказалось горраздо проще, чем я думал.
Dimka Maslov (2002-03-22 15:34:00) [2]Отличия в обработке дельфийских сообщений от виндовых нет. Их разница только в источнике сообщения. Если сообщения WM_XXXX в основном посылаются программе ядром Windows, то сообщения CM_XXXX или CN_XXXX посылаются компонентами друг другу.
Delphi сама находит момент, когда курсор мыши находит на компонент и уходит с него, посылая компоненту следующие сообщения, даже если компонент унаследован от TControl и не имеет оконной функции.
А с задачей изменения курсора, когда мышь оказывается на компонентом прекрасно справляется свойство Cursor, которое есть у каждого компонента. Установи нужный тебе курсор в инспекторе объектов или в run time, и когда мышь окажется над компонентом, курсор сам замениться на выбранный тобой. Обрабатывать сообщения для этого не надо.
Юрий Зотов (2002-03-22 15:29:00) [3]Есть у контролов такое свойство - Cursor называется...
SB.John (2002-03-22 14:57:00) [4]SPeller © Это что мне 1Е+23 раз курсор устанавливать пока пользватель над компонентой мышью елозит?
SB.John (2002-03-22 14:54:00) [5]Да нет, не то... WM_MOUSEMOVE посылается при перемещении курсора приложению захватившему мышь. А мне надо сообщение один раз, когда курсор только появился над моим TreeView.
SPeller (2002-03-22 14:09:00) [6]Отслеживаешь через WM_MouseMove перемещение курсора над нужным элементом, затем
SetCursor(LoadCursorFromFile("C:\MyCursor.ani"));
Убирается
SetCursor(0);
Или чтоб не загружать каждый раз, загружаешь, запоминаешь хэндл и используешь SetCursor когда надо.
troits (2002-03-22 14:04:00) [7]Надо еще учесть, что WM_MouseLEave - не такое простое сообщение. Оно шлется один раз после вызова ф-ции TrackMouseEvent, да и не работает для Windows 95
troits (2002-03-22 13:59:00) [8]Да. Это WM_MouseMove :-)