Ich selbst hätte den Mausstatus der Form mit Hilfe der beiden Messages CM_MOUSEENTER und CM_MOUSELEAVE abgefangen
Und wo kommen die her?
Richtig, es wird genau das gemacht was ich mache... Beim ersten WM_MOUSEMOVE wird CM_MOUSEENTER ausgelöst, bei WM_MOUSELEAVE wird CM_MOUSELEAVE ausgelöst.
Das funktioniert aber auch nur dann, wenn das Formular nicht von einem anderen überlappt wird
Oh, ja, da hast du Recht. Dann also so:
Delphi-Quellcode:
procedure TForm19.ApplicationEvents1Message(
var Msg: tagMSG;
var Handled: Boolean);
var
ClientRectAbs: TRect;
begin
if Msg.
message = WM_MOUSELEAVE
then
begin
ClientRectAbs.TopLeft := ClientToScreen(ClientRect.TopLeft);
ClientRectAbs.BottomRight := ClientToScreen(ClientRect.BottomRight);
InflateRect(ClientRectAbs, -2, -2);
if not PtInRect(ClientRectAbs, Mouse.CursorPos)
or (WindowFromPoint(Mouse.CursorPos) <>
Handle)
then
Color := clBtnFace;
end
else if Msg.
message = WM_MOUSEMOVE
then
Color := clRed;
end;
Einen Timer braucht man aber trotzdem nicht...