Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - TreeView-Focus und aktueller Knoten
Nerzhul - Fr 30.04.04 10:04
Titel: TreeView-Focus und aktueller Knoten
Hallo,
Ich habe zur TTreeView-Komponente zwei Fragen:
1) Wie stelle ich fest, über welchem Knoten eines TreeViews sich die Maus gerade befindet [z.B. im OnClick-Ereignis]?
2) Das aktuell ausgewählte Element eines Baums wird ja blau hinterlegt, aber nur wenn der TreeView auch den Focus hat. Sobald ein anderes Steuerelement angeklickt wird verschwindet die blaue Markierung. Gibt es eine Möglichkeit, diese beizubehalten auch wenn der TreeView den Focus verliert?
Danke,
-M
iKilledKenny - Fr 30.04.04 10:54
zu 1)
benutze nicht OnClick,sondern OnMouseDown/Up, das gibt dir X,Y-coordinaten der mouse mit. dann mit TTreeNode.DisplayRect prüfen, ob die maus drüber war.
zu 2)
die treeview hat eine property HideSelection, stell die doch mal auf false...
viele grüße
alex
smiegel - Fr 30.04.04 10:58
Hallo,
der Treeview verfügt u.a. noch über das Ereignis OnChange. Das wird auch ausgelöst, wenn Du mit der Maus einen Eintrag selektierst. Im OnChange-Ereignis bekommst Du den aktuell ausgewählten TreeNode übergeben.
Nerzhul - Fr 30.04.04 11:40
Hallo,
Erstmal Danke für die Antworten. Frage 2 hat sich mit HideSelection (fast) erledigt. Der gewählte Knoten erscheint jetzt grau hinterlegt wenn der TreeView den Focus verliert ... gibt es da vielleicht eine Möglichkeit, die Farbe zu ändern?
Zu Frage 1 ... ich hab mich vielleicht etwas unklar ausgedrückt ... also, ich möchte darauf reagieren, wenn die Maus über einer TreeNode ist [so wie es der TreeView selbst auch tut wenn die HotTrack-Eigenschaft auf True ist], und einen entsprechenden Hint anzeigen [der z.B. einen String aus dem Data-Teil der Node anzeigt]. Wie gehe ich da am besten vor?
Danke,
-M
JoelH - Fr 30.04.04 11:48
Titel: hmm,
das solltest du am besten via des OnMouseMove Events rausbekommen. Einfach die X/Y Koordinate umrechnen und du kommst zum aktuellen Knoten.
Nerzhul - Fr 30.04.04 14:40
Ok, Danke :-) Mit der DisplayRect-Eigenschaft der Node und der aktuellen Mausposition im MouseMove-Ereignis funktioniert das schonmal ganz gut. Ich kann dann mittels PtInRect feststellen, ob der Zeiger über einem bestimmten Knoten ist.
Aber wie zeige ich jetzt individuelle Hint-Texte an?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| if PtInRect(TreeView1.Items.GetFirstNode.DisplayRect(TRUE), Point(X, Y)) then begin TreeView1.Hint := 'blabla'; end else begin TreeView1.Hint := ''; end; |
Funktioniert zwar, aber zeigt nur den "aktuellen" Hint-Text an. D.h. wenn ich mit der Maus auf das erste Element des Baumes gehe wird zwar der 'blabla'-Hint angezeigt, aber er verschwindet nicht wenn ich über einen anderen Knoten fahre [sondern erst wenn die Maus den TreeView-Bereich verlässt]. Hat jemand ne Idee? :-)
Danke,
-M
JoelH - Fr 30.04.04 14:52
Titel: hmm,
so mach ich dass bei einem Stringgrid, sollte aber leicht zur Treeveiw konvertiert werden können
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| procedure Tfrm_mdi_anstehendeANfSchreiben.stg_ZahlungsanweisungenMouseMove( Sender: TObject; Shift: TShiftState; X, Y: Integer);
var MyCol, MyRow : integer; oldhint : string; begin oldhint := stg_zahlungsanweisungen.hint; stg_zahlungsanweisungen.MouseToCell(x, y, MyCol, MyRow); if (Mycol = 2) then begin stg_zahlungsanweisungen.showhint := true; stg_zahlungsanweisungen.hint := hintliste[MyRow].mandant; if oldhint <> stg_zahlungsanweisungen.Hint then Application.cancelhint; end; if (Mycol = 3) then begin stg_zahlungsanweisungen.showhint := true; stg_zahlungsanweisungen.hint := hintliste[MyRow].werbeart; if oldhint <> stg_zahlungsanweisungen.Hint then Application.cancelhint; end; if (Mycol > 3) AND (Mycol < 2) then stg_zahlungsanweisungen.showhint := false; end; |
Nerzhul - Fr 30.04.04 16:41
Danke, du hast mir sehr geholfen! Jetzt funktioniert alles wie geplant :-)
-M
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!