AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ermitteln ob die Maus auf der Form ist?

Ein Thema von smart · begonnen am 13. Feb 2012 · letzter Beitrag vom 14. Feb 2012
Antwort Antwort
Seite 4 von 4   « Erste     234   
Benutzerbild von jaenicke
jaenicke

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

AW: Ermitteln ob die Maus auf der Form ist?

  Alt 13. Feb 2012, 22:54
Stimmt. Darauf habe ich jetzt nicht geachtet, weil ich mich gerade sehr an dem Timer gestört hatte.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#32

AW: Ermitteln ob die Maus auf der Form ist?

  Alt 13. Feb 2012, 23:01
Stimmt. Darauf habe ich jetzt nicht geachtet, weil ich mich gerade sehr an dem Timer gestört hatte.
Macht nix, the knight is watching you
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
ASM

Registriert seit: 16. Aug 2004
165 Beiträge
 
Delphi 7 Enterprise
 
#33

AW: Ermitteln ob die Maus auf der Form ist?

  Alt 13. Feb 2012, 23:29
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.
[/DELPHI]
Obwohl inzwischen ja alles mit der Funktion MouseOverWindow() sehr einfach und bestens gelöst ist, hier doch noch meine Antwort auf die Frage.
Da kommen sie her (komplettes Beispiel):
Code:
type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Timer1: TTimer;
    Label1: TLabel;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  protected
  private
    { Private-Deklarationen }
    isMouseOnForm: Boolean;
    changed: Boolean;
    procedure CMMouseEnter(var msg: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var msg: TMessage); message CM_MOUSELEAVE;
  public
    { Public-Deklarationen }
  end;
 
  Implementation
 
  const
    cMouseOnForm = 'Mouse on form';
    cMouseOutOfForm = 'Mouse outside of form';
 
  procedure TForm1.CMMouseEnter(var msg: TMessage);
  begin
    isMouseOnForm := true;
    label1.caption := cMouseOnForm;
    changed := true;
  end;
 
  procedure TForm1.CMMouseLeave(var msg: TMessage);
  begin
    isMouseOnForm := false;
    label1.caption := cMouseOutOfForm;
    changed := true;
  end;
 
  procedure TForm1.FormCreate(Sender: TObject);
  begin
    panel1.Caption := '';
    label1.Caption := '';
    timer1.interval := 100; // oder nach Bedarf
  end;
 
  procedure TForm1.Timer1Timer(Sender: TObject);
  begin
    // "changed"- Abfrage nur, um unnötige Aktionen zu vermeiden
    if changed then
    begin
      changed := false;
      label1.invalidate;
      // oder was auch immer nötig:
      if isMouseOnForm then MachDies()
      else MachDas();
    end;
  end;
Und damit funktioniert es - anders als mit dem ApplicationEvent - perfekt auch unter Delphi 7, und zudem wird auch die Kopfzeile der Form als Bestandteil der Form erkannt, und es ist egal, ob und welche Komponente (z.B. ein Panel) auf der Form plaziert ist.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#34

AW: Ermitteln ob die Maus auf der Form ist?

  Alt 13. Feb 2012, 23:48
Warum nicht einfach WindowFromPoint ?

GetCursorPos in verbindung mit WindowFromPoint
Wenn beim Loslassen des Button (oder was auch immer ein HWND/THandle besitzt)

das HWND vom WindowFromPoint das gleiche wie mein Handle des Button ist
Ergebnis true andernfalls false

UPS:
Sehe gerade hatte Sir Rufo ja schon geschrieben.

gruss

Geändert von EWeiss (14. Feb 2012 um 00:03 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#35

AW: Ermitteln ob die Maus auf der Form ist?

  Alt 14. Feb 2012, 03:33
Probier das mal aus. Sollte eigentlich das sein was du brauchst:

Delphi-Quellcode:
procedure TForm1.FormDeactivate(Sender: TObject);
begin
  ReleaseCapture;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if GetCapture = 0 then
    SetCapture(Handle);

  if PtInRect(BoundsRect, ClientToScreen(Point(x, y))) then
    Caption := 'Maus ist über der Form'
  else
    Caption := 'Maus ist außerhalb der Form';
end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz