Delphi-PRAXiS
Seite 1 von 2  1 2      

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 TTreeView - Wie geht? (https://www.delphipraxis.net/77647-ttreeview-wie-geht.html)

Alfalge 22. Sep 2006 12:02


TTreeView - Wie geht?
 
Hallo,
ich hab da wohl eine kleine Leseschwäche in der OH oder
ein anderes mentales Problem: Ich kann partout nicht mit
einem TreeView umgehen. Spass beiseite. Ich hab folgendes
Problem: Wenn ich auf eine Node klicke, passiert was. Das
ist auch richtig und in meinem Interesse. Meine einzige Frage
ist, wie ich im OnClick die geklickte Node rausbekomme.
Ich bin zu blöd oder denk zu kompliziert!

Bitte helft mir.

Dank im Vorraus
Alf

s.h.a.r.k 22. Sep 2006 12:03

Re: TTreeView - Wie geht?
 
Gibt es da nicht eine Eigenschaft Selected?! Oder war das bei der TListView? :gruebel:

RobertDorn 22. Sep 2006 12:18

Re: TTreeView - Wie geht?
 
jab.. selected gibs da.

Phoenix 22. Sep 2006 12:23

Re: TTreeView - Wie geht?
 
Ich denke der angeklickte Node ist der Sender vom Event, (oder kommt in den EventArgs mit) oder lieg ich da jetzt falsch?

Matze 22. Sep 2006 12:49

Re: TTreeView - Wie geht?
 
Über die Mauskoordinaten könnte man es so lösen:

Delphi-Quellcode:
Node := GetNodeAt(x, y);
Das geht dann beispielsweise im OnMouseDown oder OnKouseUp sehr leicht, da dir hier x und y direkt zu Verfügung stehen. Oder liege ich da nun falsch? :mrgreen:

drschubi 22. Sep 2006 13:34

Re: TTreeView - Wie geht?
 
Hallo Alf,

vielleicht hilft dir dies:

Im OnChange Ereignis kannst Du den absoluten Index des angklickten Node ermitteln mit z.Bsp.:

Delphi-Quellcode:
Showmessage(IntToStr(Node.AbsoluteIndex));
Gruß René

Alfalge 22. Sep 2006 13:53

Re: TTreeView - Wie geht?
 
@Phoenix
Ja, leider... ich hatte das auch gehofft.

Delphi-Quellcode:
procedure TBackofficeFor.AppTrVClick(Sender: TObject);
begin
  ShowMessage(Sender.ClassName);
end;
Bringt einfach nur TTreeView. Das sehe ich auch ein, weil ich ja auf die Komponente raufhaue.

@drschubi
OnChange ist schon geil, da kann ich die Node abgreifen, zu der gewechselt wird. Selected ist auch so ein Thema.

Da ich ein sehr fauler Mensch bin, habe ich über Stunden die Möglichkeit gesucht, OnChange, Selected usw aussen vor
zu lassen, bzw. nicht abzuarbeiten. Ich will auf so eine Node einfach draufhauen, die Node geliefert bekommen, auswerten und gut. Ich dacht OnClick wäre geil, weil Mouse, Tastatur oÄ mir ein solches Ereignis liefern könnten.

D.h. ich will eigentlich nur ein Ereignis oder besser noch, eine von mir definierte Action abarbeiten müssen und komme damit nicht weiter.

Irgendwelche Ideen, die genial einfach sind?

Alf

Phoenix 22. Sep 2006 14:13

Re: TTreeView - Wie geht?
 
Hrm...

haben die Nodes ein eigens OnClick - Event? ;-)

Ich bin zur Zeit leider zu sehr mit .NET am arbeiten so dass ich die VCL-Treeview nicht mehr im Kopf hab. Bei meiner .NET - Treeview geht das nämlich alles :)

Alfalge 22. Sep 2006 16:50

Re: TTreeView - Wie geht?
 
@Phoenix
Gutes Argument. So weit bin ich auch schon fast. Ich mach das momentan noch mit D7. Ich hab einfach die
IDE so lieb gewonnen, daß ich mich mit allen Mitteln (nach ausführlichen Tests) gegen BDS gewehrt habe.
Einige Kollegen haben auch schon gemeint, .Net wäre zeitgemässer, ich bin da wohl ein wenig altmodisch.

Mist, ich komme mit der alten IDE einfach besser klar. Aber was hilfts, bye bye...

Lannes 22. Sep 2006 20:10

Re: TTreeView - Wie geht?
 
Hallo,
Zitat:

Zitat von Alfalge
...Meine einzige Frage
ist, wie ich im OnClick die geklickte Node rausbekomme...

OnClick in Verbindung mit Selected liefert dir den selectierten Node,
egal ob Du drauf klickst oder daneben.
OnChange wird nur ausgelöst wenn die Selectierung von einen Node auf einenen anderen wechselt,
klickst du einen markierten Node an, wird das Ereignis nicht ausgelöst.

Matze hat Dir schon den richtigen Tipp mit GetNodeAt(x, y); gegeben, wenn Du das noch mit
GetHitTestInfoAt(x,y) verbindest, dann hast Du genau den Knoten der angeklickt wird.
Über den Rückgabewert vom Typ THitTest der Funktion GetHitTestInfoAt kannst Du sehr genau feststellen worauf im Bereich des TreeView geklickt wurde.
Delphi-Quellcode:
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var aNode : TTreeNode;
begin
  //htOnLabel x,y liegt im Bereich der Node-Beschriftung
  if (htOnLabel in TreeView1.GetHitTestInfoAt(x,y)) then
    begin
    aNode := TreeView1.GetNodeAt(x,y);
    showmessage('KnotenText: '+TreeView1.Selected.Text+#13#10
                +'AbsoluteIndex: '+IntToStr(TreeView1.Selected.AbsoluteIndex));
    end
    else
      showmessage('Nicht auf die Beschriftung eines Node geklickt');
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:28 Uhr.
Seite 1 von 2  1 2      

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