Próbuję wykryć komunikaty Enter/Leave myszy CM_MOUSEENTER
i CM_MOUSELEAVE
, ale nie jest to przechwytywanie. Co ja tu robię źle?Mysz Enter/Leave messages nie działa?
type
TMyControl = class(TCustomControl)
private
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;
end;
procedure TMyControl.CMMouseEnter(var Message: TMessage);
begin
//Handle mouse entering
//Breakpoint never reached, procedure never called
end;
procedure TMyControl.CMMouseLeave(var Message: TMessage);
begin
//Handle mouse leaving
//Breakpoint never reached, procedure never called
end;
procedure TMyControl.WMNCHitTest(var Message: TWMNCHitTest);
var
Ch: Bool;
begin
if csDesigning in ComponentState then
Message.Result := HTCLIENT
else begin
Ch:= False;
//Do checks and pass `Ch:= True;` if something changed...
if Ch then Invalidate;
end;
end;
Mój pierwszy komentarz to brak punktów przerwania do monitorowania takich rzeczy. Interakcja interfejsu użytkownika jest zawsze pomieszana po przełączeniu się do debuggera. Użyj czegoś podobnego do Codesite, aby wysłać wiadomość do innego okna i nie zmieniaj fokusa podczas monitorowania. – mj2008