Einzelnen Beitrag anzeigen

Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.651 Beiträge
 
Delphi 11 Alexandria
 
#29

AW: Ermitteln ob die Maus auf der Form ist?

  Alt 13. Feb 2012, 21:19
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...
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat