![]() |
Treeview: Pfad
Hi,
ich habe gerade ein kleines Problem. Und zwar baue ich mir gerade einen kleinen Explorer für mein Programm. Im Treeview stehen die ORdner und in einer Listview sollen die Dateien stehen. Das mit dem Suchen der Dateien und Ordner ist nciht so das Problem, sondern: Ich muss den Pfad auf dem Treeview haben, um die Dateien in das Listview einzufügen. Der Pfad bildet wie im Windows-Exploreer auch, alle "geöffneten" Items der Treeview-Komponente, natürlich muss dann noch ein / dazwischen... Nur wie bekomme ich den Pfad zusammen :?: Ich hoffe ihr wisst was ich meine ;-) Danke schon mal !! |
Re: Treeview: Pfad
So lange vom selektierten Node zum Parent Node sprimgen bis es nicht mehr geht, dann bist du ganz oben. Node-Text auslesen, Backslash dazwischen und zusammenfügen.
BTW: Ab D6 gibt es die Shell-Komponenten, die schon den Explorer Treeview und Listview bereitstellen. |
Re: Treeview: Pfad
Die Shellkomponenten sind nicht die richtigen, weil ich das auch für Delphi 5 brauche...
Danke aber!! |
Re: Treeview: Pfad
So und hier die praktische Umsetzung:
Delphi-Quellcode:
Was war daran jetzt so schwer? 10 Minuten Arbeit und selbst habe ich es auch noch nie gemacht.
////////////////////////////////////////////////////////////////////////////////
// Pfad eines Treeview-Knotens holen, ausgehen von einem selektierten Knoten function GetPath(Node: TTreeNode): String; var s1, s2: String; begin // so lange es Knoten gibt while Node <> nil do begin // Text holen s2 := Node.Text; // String zusammenbauen s1 := s2+ '\'+ s1; // einen Knoten nach oben gehen Node := Node.Parent; end; // Zurückgeben result := s1; end; procedure TForm1.TreeView1Click(Sender: TObject); var AnItem: TTreeNode; ScreenPt, ClientPt: TPoint; HT: THitTests; begin // Wo wurde geklickt GetCursorPos(ScreenPt); // umrechen von Screen-Koordinaten nach Client-Koordinaten ClientPt := ScreenToClient(ScreenPt); // Sicherstellen, dass was selektiert wurde if TreeView1.Selected = nil then Exit; // Hittest machen HT := TreeView1.GetHitTestInfoAt(ClientPt.X, ClientPt.Y); // Knoten holen AnItem := TreeView1.GetNodeAt(ClientPt.X, ClientPt.Y); // Hittest prüfen if (HT - [htOnItem, htOnIcon, htNowhere, htOnIndent] <> HT) then begin // Pfad holen Caption := GetPath(AnItem); end; end; |
Re: Treeview: Pfad
Danke, aber ich habe das jetzt so gemacht:
Delphi-Quellcode:
Du hast mir doch praktisch shcon im Chat die Lösung gesagt.
Item := Treeview1.Selected;
dir := ''; while (Item <> nil) do begin dir := dir + '\' + Item.Text; Item := Item.GetPrev; end; |
Re: Treeview: Pfad
Liefert GetPrev auch den Vorgänger-Knoten oder den nächst höheren Knoten der gleichen Ebene? da bin ich mir nicht sicher, daher ist Node := Node.Parent wohl sicherer und es wird auch klarer, was da passiert.
|
Re: Treeview: Pfad
Ok nehme ich das ;-)
|
Re: Treeview: Pfad
Nee, wenn deins funktioniert, nimm doch das. Ist doch egal.
Aha. Da haben wir's. Nimm mal meinen Code und nimm GetPrev. Dann klick mal etwas in den Ästen rum und kuck was passiert. Mußt doch meinen nehmen. :wink: |
Re: Treeview: Pfad
mhm stimmt ;-)
Hatte bisher nur ein Item drinn, da ist das nicht aufgefallen. Danke für die Hilfe, Luckie |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:52 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