Ich versuche, Maus eingeben/lassen Nachrichten CM_MOUSEENTER
und CM_MOUSELEAVE
zu erkennen, aber es ist nicht abzufangen. Was mache ich hier falsch?Maus Geben/Lassen Sie Nachrichten nicht funktionieren?
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;
Mein erster Kommentar ist, verwenden Sie keine Haltepunkte für die Überwachung solcher Sachen. UI-Interaktion ist immer gestört, wenn Sie in den Debugger wechseln. Verwenden Sie etwas wie Codesite, um eine Nachricht an ein anderes Fenster zu senden, und achten Sie darauf, während der Überwachung den Fokus nicht zu ändern. – mj2008