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

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

 
mike.dld ©   (2002-12-31 14:57) [0]

Хочу реализовать поддержку MouseHover и MouseLeave и KOL-компоненте, но ничего не получается. Скажите, пожалуйста, как это сделать.


 
Gandalf   (2002-12-31 16:33) [1]

Уже все реализованно, только они называются MouseEnter и MouseLeave.

С Новым Годом!


 
mike.dld ©   (2002-12-31 16:45) [2]

Спасибо, но я не про то. Я хочу по-разному его отрисовывать в зависимости от того, над ним указатель или нет. Пробовал в MouseInControl, но чего-то не работает.


 
Gandalf   (2002-12-31 21:15) [3]

Сделай флаг Hover, и при MouseEnter Hover:=True, MouseLeave Hover:=False; Можешь использовать в самой отрисовке WindowFromPoint(Тут позиция мыши), если Handle совпадет, то значит мышь внутри.


 
mike.dld ©   (2003-01-02 15:42) [4]

А, с этим проблем нет. Как сообщить компоненту, что он должен обновиться?


 
Gandalf   (2003-01-02 16:34) [5]


> А, с этим проблем нет. Как сообщить компоненту, что он должен
> обновиться?


Пошли сообщение WM_PAINT, или там скажем InvalidateRect, UpdateWindow или свое пошли WM_PLEASEREPAINT.


 
mike.dld ©   (2003-01-02 19:15) [6]

Слушайте, я не знаю в чём дело, может надо какие-нибудь особые параметры устанавливать для компонента при создании или ещё что-нибудь, но сколько не пробую, Виндовс совсем не хочет передавать моему контролу сообщения типа 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 22:54) [7]


> Слушайте, я не знаю в чём дело, может надо какие-нибудь
> особые параметры устанавливать для компонента при создании
> или ещё что-нибудь, но сколько не пробую, Виндовс совсем
> не хочет передавать моему контролу сообщения типа WM_MOUSEHOVER,
> WM_MOUSELEAVE, WM_LBUTTONDOWN и WM_LBUTTONUP, хотя с WM_MOUSEMOVE
> всё в порядке.


Насчет WM_LBUTTONDOWN и WM_LBUTTONUP - незнаю, по твоему коду не понять. А вот насчет Ховера - ты прав, особые, но параметры - а реализация, не хочу вдаваться в детали - к KOL это отношения не имеет, да поздно уже. Посмотри WndProcMouseEnterLeave, почитай TrackMouseEvent и можешь обратиться в WinAPI - без обид!
ЗЫ: В итоге тебе надо TrackMouseEvent вызывать при движении мыши - а она, если так случилось, сгенерит сообщения (Hower, Leave) - по ситуации с момента прошлого вызова функции TrackMouseEvent. Просто так тебе эти сообщения никто не пошлет (разве, что ты сам).



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

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



Память: 0.46 MB
Время: 0.013 c
1-24527
Adoon
2003-08-28 11:37
2003.09.08
RichEdit и RadioGroup


1-24521
ZHK
2003-08-26 13:22
2003.09.08
EInvalidPointer?


3-24374
WASYA
2003-08-15 19:12
2003.09.08
TDBText


1-24511
MakNik
2003-08-27 09:27
2003.09.08
TMemo


1-24483
Dysan
2003-08-28 12:21
2003.09.08
Как поймать ошибку?




   Наверх