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 Treeview: Pfad (https://www.delphipraxis.net/8869-treeview-pfad.html)

Alexander 14. Sep 2003 08:29


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 !!

Luckie 14. Sep 2003 08:51

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.

Alexander 14. Sep 2003 10:23

Re: Treeview: Pfad
 
Die Shellkomponenten sind nicht die richtigen, weil ich das auch für Delphi 5 brauche...
Danke aber!!

Luckie 14. Sep 2003 10:58

Re: Treeview: Pfad
 
So und hier die praktische Umsetzung:
Delphi-Quellcode:
////////////////////////////////////////////////////////////////////////////////
// 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;
Was war daran jetzt so schwer? 10 Minuten Arbeit und selbst habe ich es auch noch nie gemacht.

Alexander 14. Sep 2003 11:07

Re: Treeview: Pfad
 
Danke, aber ich habe das jetzt so gemacht:
Delphi-Quellcode:
 Item := Treeview1.Selected;
 dir := '';
 while (Item <> nil) do
 begin
   dir := dir + '\' + Item.Text;
   Item := Item.GetPrev;
 end;
Du hast mir doch praktisch shcon im Chat die Lösung gesagt.

Luckie 14. Sep 2003 11:12

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.

Alexander 14. Sep 2003 11:35

Re: Treeview: Pfad
 
Ok nehme ich das ;-)

Luckie 14. Sep 2003 11:54

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:

Alexander 14. Sep 2003 12:16

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 08:39 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