![]() |
Label-Position auswerten
Hi,
es geht um Mauspositionen. Wie und wo kann man auswerten, ob sich der Mauszeiger über einem Label befindet ? |
Re: Label-Position auswerten
|
Re: Label-Position auswerten
|
Re: Label-Position auswerten
Das ControlAtPos hört sich gut an. Nur bringt so was :
Delphi-Quellcode:
keinerlei Reaktion. Das MouseMove wird allerdings schon angesprochen. Lasse ich die if Abfrage weg, so kommt die showmessage. Da liegt also der Hund begraben. Nur wo ? :mrgreen:
procedure Tfrm.FormMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer); begin inherited; if ControlAtPos(Point (x,y),false) = TLabel (Self) then showmessage ('asdsaf'); end; |
Re: Label-Position auswerten
Da schlummert nicht nur ein Hund.
Das Ereignis OnMouseMove() wird nur für die Form selbst ausgelöst, für auf der Form befindliche WinControls wird es an diese delegiert. Das bedeutet, das du das Ereignis dort abholen kannst - beim Label selbst. Außerdem willst du deine Form ganz sicher nicht nach TLabel casten - oder? Grüße vom marabu |
Re: Label-Position auswerten
Zitat:
|
Re: Label-Position auswerten
Moin Hansa,
Zitat:
interface
Delphi-Quellcode:
type
TMyLabel = class(TLabel) private procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER; procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; end; implemenation procedure TMyLabel.CMMouseEnter(var Message: TMessage); begin self.Font.Color := clRed; end; procedure TMyLabel.CMMouseLeave(var Message: TMessage); begin self.Font.Color := clBlack; end; procedure TForm1.FormCreate(Sender: TObject); var mlbl : TMyLabel; begin mlbl := TMyLabel.Create(self); mlbl.Parent := self; mlbl.Caption := 'TESTLABEL'; mlbl.Left := 10; mlbl.Top := 10; end; |
Re: Label-Position auswerten
Christian, das würde bedeuten, sämtliche Labels umzubauen. :shock: Ich muß die auch schon zur Designzeit rumschieben können. Was ist denn hierdran verkehrt :
Delphi-Quellcode:
Wandere ich auf der Form rum, dann wird der else Zweig durchlaufen. Bewege ich die Maus über einem Label, so passiert absolut nichts. Habe deshalb das i mit eingebaut. Es ist also kein Sehfehler. 8)
procedure Tfrm.FormMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer); begin inherited; i := i + 1; if ControlAtPos(Point (x,y),true,true) = TLabel (Sender) then Memo1.Lines.Add (IntToStr (i)+' Label') else Memo1.Lines.Add (IntToStr (i)+' kein Label') end; |
Re: Label-Position auswerten
Hansa, du hast zwar inzwischen self durch Sender ersetzt, aber wahrscheinlich doch nicht verstanden was ich dir im Beitrag #5 beibiegen wollte. Ersetze noch "TLabel(Sender)" durch "Sender as TLabel", vielleicht wird dann deutlicher, das Sender = Self = frm ist.
Um Labels mit roter Schrift hervorzuheben kannst du einfach für alle TLabel Komponenten einen gemeinsamen Event Handler verwenden:
Delphi-Quellcode:
Grüße vom marabu
procedure TDemoForm.LabelMouseEnter(Sender: TObject);
begin with Sender as TLabel do Font.Color := clRed; end; procedure TDemoForm.LabelMouseLeave(Sender: TObject); begin with Sender as TLabel do Font.Color := clBlack; end; |
Re: Label-Position auswerten
[quote="Hansa"]Christian, das würde bedeuten, sämtliche Labels umzubauen. :shock: Ich muß die auch schon zur Designzeit rumschieben können. Was ist denn hierdran verkehrt :
Alles :cyclops: Das OnMouseMove Event wird vom Formualar gefeuert. Wenn Du mit der Maus über das Label kommst wird das OnMouseMove Event vom Label gefeuert. Wenn Du den Type prüfen möchest solltest Du den is Operator verwenden
Delphi-Quellcode:
Der einfachste Weg ist der, den Christain vorgeschlagen hat. Du kannst Dir eine eigene Labelkomponente basteln und in der Komponentenpallette registrieren.
if ControlAtPos(Point (x,y),true,true) is TLabel then
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz