Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Prism Welches Control befindet sich unter dem Mauscursor? (https://www.delphipraxis.net/77686-welches-control-befindet-sich-unter-dem-mauscursor.html)

gfjs 23. Sep 2006 04:03


Welches Control befindet sich unter dem Mauscursor?
 
Guten Morgen.

Ich möchte eine Aktion ausführen, wenn sich der Mauscursor über einem Label befindet - das klappt auch so:
Delphi-Quellcode:
procedure TWinForm.Panel1_MouseEnter(sender: System.Object; e: System.EventArgs);
begin
  (Sender as System.Windows.Forms.Control).BackColor := System.Drawing.Color.Red;
end;
Jeztt möchte ich das Ganze aber mit einer Verzögerung unter Verwendung eines Timers haben:
Delphi-Quellcode:
procedure TWinForm.Panel1_MouseEnter(sender: System.Object; e: System.EventArgs);
begin
  Timer1.Enabled := true;
end;
procedure TWinForm.Timer1_Tick(sender: System.Object; e: System.EventArgs);
begin
  Timer1.Enabled := false;
  (?????).BackColor := System.Drawing.Color.Red;
end;
Wie kann ich in Timer1.Tick nun feststellen, über welchem Control sich der Mauscursor befindet?

Vielen Dank im Voraus.

Gruß Jürgen

Jürgen Thomas 23. Sep 2006 09:07

Re: Welches Control befindet sich unter dem Mauscursor?
 
Hallo Jürgen,

lange nichts voneinander gehört...

Theoretisch müsstest Du Dir in MouseEnter merken, welches Control mit der Maus angelaufen wurde:
Delphi-Quellcode:
private ctlTemp: TWinControl;
procedure TWinForm.Panel1_MouseEnter(sender: System.Object; e: System.EventArgs);
begin
  //  ich vermute, die Abfrage ist nicht nötig, weil MouseEnter durch keine anderen Objekte
  //  ausgelöst werden kann; aber das müsstest Du überprüfen
  if sender is TWinControl then
  begin
    ctlTemp = sender as TWinControl;
    Timer1.Enabled := true;
  end;
end;
procedure TWinForm.Timer1_Tick(sender: System.Object; e: System.EventArgs);
begin
  Timer1.Enabled := false;
  ctlTemp.BackColor := System.Drawing.Color.Red;
end;
Praktisch löst das aber Dein Problem nicht, weil Du nicht weißt, ob die Maus sich nach dieser Zeit immer noch über ctlTemp befindet. Dazu musst Du die statische Funktion Delphi-Referenz durchsuchenControl.MousePosition auswerten und mit PointToClient / PointToScreen umrechnen, ob diese Position noch zu ctlTemp gehört.

Einfacher sollte es mit dem Ereignis Delphi-Referenz durchsuchenControl.MouseHover in Verbindung mit MouseHoverTime gehen.

Viel Erfolg bei der Suche! Jürgen

gfjs 24. Sep 2006 06:09

Re: Welches Control befindet sich unter dem Mauscursor?
 
Hallo Jürgen.

Mit MouseHover hab ich's schon versucht. Allerdings habe ich die zeitliche Verzögerung nicht hingekriegt - MouseHoverTime habe ich weder in der Delphi-Hilfe noch in der SDK-Dokumentation gefunden. Ich werd's mal mit Deinem ersten Vorschlag versuchen.

Vielen Dank und noch einen schönen Sonntag.

Gruß Jürgen.

PS. War ein paar Tage in Rom - um mir den Geldbeutel klauen zu lassen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:27 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