Помогите пожалуйста!
Создал класс, что-то типа обычной панели TPanel а в нем добавил метод:
procedure onMouseEnter(var mes: TWMMouse); message CM_MOUSELEAVE;
Проблема в том, что если мышь отдернуть резко, то сообщение CM_MOUSELEAVE не наступает. Как решить эту проблему? Заранее Спасибо!
Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
26-07-2005 02:39 | Сообщение от автора вопроса
Большое спасибо, panda, а насчет того, что курсор над панелью - само собой опечатка.
var
p: TPoint;
wc: TWinControl;
begin
p:=GetCursorPos;
wc:=FindVCLWindow(p);
if wc.name='Panel1' then begin
Timer1.Enabled:=false;
wc.Perform(CM_MOUSELEAVE,0,0);
end;
end;
Про WM_MOUSEHOVER и TrackMouseEvent написано в MSDN. Вполне можно и этот механизм использовать вместо таймера.
Сообшение отправлять методом Perform или функцией SendMessage?
В данной ситуации лучше Perform (если только Вы не собираетесь отлаживать сообщения к Вашей панели через Spy++ или WinSight).
Насчет таймера спасибо! Интересная идея (по крайней мере для меня, я пока только учусь)
Но хотелось бы побольше узнать от событии WM_MOUSEHOVER и о том, как его использовать
Как решить эту проблему?
Например, использовать таймер (запускаемый на CM_MOUSEENTER). Если по истечению интервала мышь находится за пределами панели и CM_MOUSELEAVE не отправлялось - отправить его самостоятельно.
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.