![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как
mike.dld © (2002-12-31 14:57:00)
Хочу реализовать поддержку MouseHover и MouseLeave и KOL-компоненте, но ничего не получается. Скажите, пожалуйста, как это сделать.
Gandalf (2003-01-02 22:54:00) [1]
> Слушайте, я не знаю в чём дело, может надо какие-нибудь
> особые параметры устанавливать для компонента при создании
> или ещё что-нибудь, но сколько не пробую, Виндовс совсем
> не хочет передавать моему контролу сообщения типа WM_MOUSEHOVER,
> WM_MOUSELEAVE, WM_LBUTTONDOWN и WM_LBUTTONUP, хотя с WM_MOUSEMOVE
> всё в порядке.
Насчет WM_LBUTTONDOWN и WM_LBUTTONUP - незнаю, по твоему коду не понять. А вот насчет Ховера - ты прав, особые, но параметры - а реализация, не хочу вдаваться в детали - к KOL это отношения не имеет, да поздно уже. Посмотри WndProcMouseEnterLeave, почитай TrackMouseEvent и можешь обратиться в WinAPI - без обид!
ЗЫ: В итоге тебе надо TrackMouseEvent вызывать при движении мыши - а она, если так случилось, сгенерит сообщения (Hower, Leave) - по ситуации с момента прошлого вызова функции TrackMouseEvent. Просто так тебе эти сообщения никто не пошлет (разве, что ты сам).
mike.dld (2003-01-02 19:15:00) [2]Слушайте, я не знаю в чём дело, может надо какие-нибудь особые параметры устанавливать для компонента при создании или ещё что-нибудь, но сколько не пробую, Виндовс совсем не хочет передавать моему контролу сообщения типа WM_MOUSEHOVER, WM_MOUSELEAVE, WM_LBUTTONDOWN и WM_LBUTTONUP, хотя с WM_MOUSEMOVE всё в порядке.
Принимаю их в WndProc case"ом:
var d: PMyData;
...
case Msg.message of
...
WM_MOUSEHOVER: begin
d := Pointer(Clt.CustomData);
d.fMouseIn := true;
( WM_PAINT,0,0)
Слушайте, я не знаю в чём дело, может надо какие-нибудь особые параметры устанавливать для компонента при создании или ещё что-нибудь, но сколько не пробую, Виндовс совсем не хочет передавать моему контролу сообщения типа WM_MOUSEHOVER, WM_MOUSELEAVE, WM_LBUTTONDOWN и WM_LBUTTONUP, хотя с WM_MOUSEMOVE всё в порядке.
Принимаю их в WndProc case"ом:
var d: PMyData;
...
case Msg.message of
...
WM_MOUSEHOVER: begin
d := Pointer(Clt.CustomData);
d.fMouseIn := true;
Ctl.Perform(WM_PAINT,0,0);
end;
...
end;
Gandalf (2003-01-02 16:34:00) [3]
> А, с этим проблем нет. Как сообщить компоненту, что он должен
> обновиться?
Пошли сообщение WM_PAINT, или там скажем InvalidateRect, UpdateWindow или свое пошли WM_PLEASEREPAINT.
mike.dld (2003-01-02 15:42:00) [4]
А, с этим проблем нет. Как сообщить компоненту, что он должен обновиться?
Gandalf (2002-12-31 21:15:00) [5]
Сделай флаг Hover, и при MouseEnter Hover:=True, MouseLeave Hover:=False; Можешь использовать в самой отрисовке WindowFromPoint(Тут позиция мыши), если Handle совпадет, то значит мышь внутри.
mike.dld (2002-12-31 16:45:00) [6]
Спасибо, но я не про то. Я хочу по-разному его отрисовывать в зависимости от того, над ним указатель или нет. Пробовал в MouseInControl, но чего-то не работает.
Gandalf (2002-12-31 16:33:00) [7]
Уже все реализованно, только они называются MouseEnter и MouseLeave.
С Новым Годом!