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/)
-   -   Delphi über welchem objekt ist die maus (https://www.delphipraxis.net/89840-ueber-welchem-objekt-ist-die-maus.html)

Andreas L. 6. Apr 2007 16:26


über welchem objekt ist die maus
 
Hi,
ich habe mir selbst einen Button, bestehend aus einem Label und 2 Images gebaut. Das 2te Image soll quasi ein Hovereffekt sein. Also blende ich im onMouseEnter das erste Bild aus und der 2te ein. Im OnMouseLeave des zweiten Bildes blende ich das erste Bild ein und das 2te aus. Problem: Kommt man mit der Maus auf das Label (das soll man sogar) wird das OnmouseLeave-Eregnis ausgelöst. Jetzt dachte ich mir, ich bau eine Abfrage im OnMouseOut ein und schaue ob sich die Maus über dem Label befindet. Ist dies wahr, bleibt das Hoverbild da, wo es ist. :wall:

Doch wie stelle ich fest über welcher Komponente sich die Maus befindet?

Schonmal vielen Dank :coder2:

Khabarakh 6. Apr 2007 16:30

Re: über welchem objekt ist die maus
 
Warum prüfst du nicht einfach, ob die Mauskoordinaten innerhalb des Labels liegen :gruebel: ?

Andreas L. 6. Apr 2007 16:36

Re: über welchem objekt ist die maus
 
Zitat:

Zitat von Khabarakh
Warum prüfst du nicht einfach, ob die Mauskoordinaten innerhalb des Labels liegen :gruebel: ?

Daran habe ich auch schon gedacht. Ist aber ziemlich viel Aufwand... gibt es denn nicht eine einfachere Lösung?

gordon freeman 6. Apr 2007 16:40

Re: über welchem objekt ist die maus
 
Delphi-Quellcode:
Function MouseInLabel : boolean;
begin
result := false;
if (mouse.x > label1.left) and (mouse.x < (label1.left + label1.width))
and (mouse.y > label1.top) and (mouse.y < (label1.top + label1.height)) then
  result := true;
end;
Einfach noch so umschreiben, dass man das Label und die Mauskoordinaten übergeben kann. Sieht für mich nicht sonderlich kompliziert aus.

Andreas L. 6. Apr 2007 16:41

Re: über welchem objekt ist die maus
 
Da habe ich wohl zu kompliziert gedacht :gruebel:

Vielen Dank für den Code :thumb:

Khabarakh 6. Apr 2007 16:45

Re: über welchem objekt ist die maus
 
Also wenn du das kompliziert nennst :stupid: ...

Delphi-Quellcode:
  if not PtInRect(Image.BoundsRect, Parent.ScreenToClient(Mouse.Position)) then [...]
PS: Meinte eigentlich schon im letzten Beitrag das Image, dadurch wird das Ganze unabhängig vom Inhalt

Andreas L. 6. Apr 2007 16:48

Re: über welchem objekt ist die maus
 
Zitat:

Zitat von Khabarakh
Also wenn du das kompliziert nennst :stupid: ...

Delphi-Quellcode:
  if not PtInRect(Image.BoundsRect, Parent.ScreenToClient(Mouse.Position)) then [...]
PS: Meinte eigentlich schon im letzten Beitrag das Image, dadurch wird das Ganze unabhängig vom Inhalt

Also da bekomme ich ne Zugriffsverletzung...

Hab Mouse.Position durch Mouse.CursorPos ersetzt da es bei mir kein Position gab.

Khabarakh 6. Apr 2007 17:22

Re: über welchem objekt ist die maus
 
Das schiebe ich zu einem Drittel auf das wirklich strunzdumme IntelliSense von D6 und zu einem weiteren Drittel auf die nicht sehr logische Benennung der Eigenschaft und zu einem letzten Drittel war es einfach eine Aufgabe an dich :mrgreen: . Aber eine AV ist trotzdem interessant, eigentlich sollte es gar nicht kompilieren.

Andreas L. 6. Apr 2007 17:41

Re: über welchem objekt ist die maus
 
Ahh, parent muss Image2 heißen. Das habe ich ja voll übersehen :-)

Danke :mrgreen:

EDIT: Aber wenn ich mit der Maus von obenher auf das Bild fahre gehts nicht. Nur von links, rechts und unten. Wieso?

Ydobon 7. Apr 2007 09:15

Re: über welchem objekt ist die maus
 
Die Funktion FindVCLWindow liefert das entsprechende Control zu einem Punkt, vielleicht geht es damit besser.

Edit: Bzw. funktioniert mit einem fensterlosen Label natürlich gar nicht, aber daran denkt man halt erst, nachdem man sich blamiert hat.


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