![]() |
ShellTreeView: Node -> Pfad (ohne Selektieren!)
Hallo!
Wie man in einer ShellTreeView über einen Verzeichnispfad den entsprechenden Knoten findet wird vielfach erklärt. Aber ich finde einfach nichts für den umgekehrten Weg! Konkret: Ich will per Knopfdruck die Verzeichnisse aller momentan in ShellTreeView angezeigter Knoten (Level>1) in eine Liste speichern ohne jeden Knoten per Select auszuwählen zu müssen um dann ShellTreeView1.Path auslesen zu können. Beispiel: Desktop |- Arbeitsplatz | |- SYSTEM (C: ) | | |- Test | | |- WINDOWS (..) Liste: C:\ C:\Test C:\WINDOWS Kennt jemand eine Möglichkeit? Irgendwelche String-Kopier-Tricks fnktionieren auch nicht zuverlässig. ShellTreeView muss ja bei einem Node-Wechsel die Path-Variable auch irgendwie ermitteln. Allerdings finde ich in der ShellTreeView.pas-Datei einfach keinen Hinweis... Gruß e-gon |
AW: ShellTreeView: Node -> Pfad (ohne Selektieren!)
Ja, ich kenn was, und zwar was ganz einfaches, indem du GUI und Logik trennst. :roll:
Ließ das nicht aus der TreeView, sondern nur due tausenden von Möglichkeiten, um per Befehl dieses aufzulisten. Angefangen ![]() ![]() ![]() ![]() ![]() |
AW: ShellTreeView: Node -> Pfad (ohne Selektieren!)
Hallo himitsu,
danke für die schnelle Antwort! Da gab es allerdings ein Missverständnis! Ich will ja nicht den gesamten Verzeichnisbaum auflisten, sondern ausschließlich die Verzeichnisse, die im ShellTreeView angezeigt werden. Also NICHT die Unterverzeichnisse, die man im ShellTreeView nicht sieht! Außerdem hat der Benutzer im Programm die Möglichkeit, einzelne Knoten im ShellTreeView auszublenden (wird durch löschen des Knoten verwirklicht), ohne das Verzeichnis jedoch tatsächlich auf der Festplatte zu löschen! Also brauche ich die Verbindung zwischen GUI und Logik! Gruß e-gon |
AW: ShellTreeView: Node -> Pfad (ohne Selektieren!)
Ich benutze die ShellTreeview nie, aber die dürfte ja von TTreeview abgeleitet sein. Dann könnte man doch (rekursiv) über die Nodes iterieren (GetNext, GetNextChild) und den Text auslesen, oder irre ich mich da?
|
AW: ShellTreeView: Node -> Pfad (ohne Selektieren!)
Hallo DeddyH,
leider nicht so richtig. Als Antwort bekommt man sowas wie "Desktop/Arbeitsplatz/SYSTEM (C: )/WINDOWS" statt "C:\WINDWOS". Nur mit String-Kopier-Tricks könnte man sich das richtige Verzeichnis darauß basteln. Das funktioniert aber nur bedingt... Gruß e-gon |
AW: ShellTreeView: Node -> Pfad (ohne Selektieren!)
Du mußt ja nicht rekursiv alles auflisten.
FindFirst/FindNext liest immer nur ein Verzeichnis aus (wenn man es nicht rekursiv aufruft) und auch bei vielen der Komponenten/Funktionen läßt sich angeben, ob rekursiv gearbeitet werden soll. |
AW: ShellTreeView: Node -> Pfad (ohne Selektieren!)
Es geht doch nicht um FindFirst/FindNext, sondern um die (gefilterte) Darstellung im TreeView.
|
AW: ShellTreeView: Node -> Pfad (ohne Selektieren!)
Natürlich kann man das auch selber filtern.
Aber soll es genau automatisch gleich funktionieren, dann sollte man sich mal mit ![]() Nunja, jeder TreeView-Eintrag hat eine Data-Eigenschaft, wo ein TShellFolder drin steckt. |
AW: ShellTreeView: Node -> Pfad (ohne Selektieren!)
Danke himitsu!
Der Tipp mit TShellFolder war die Lösung! :thumb: Für alle, die ds gleiche Problem haben:
Delphi-Quellcode:
Der Aufruf könnte dann z. B. so aussehen:
function GetShellNodePath(Node: TTreeNode): string;
var Fldr : TShellFolder; begin Fldr := TShellFolder(Node.Data); if DirectoryExists(Fldr.PathName) then Result := Fldr.PathName else Result := ''; end;
Delphi-Quellcode:
Caption:= GetShellNodePath(ShellTreeView1.Selected);
Gruß e-gon |
AW: ShellTreeView: Node -> Pfad (ohne Selektieren!)
Kleine Ergänzung:
Delphi-Quellcode:
Schöner wären natürlich entsprechende Exceptions, wenn keine Daten da sind, die eigentlich hätten da sein müssen, aber das kannst Du ja nach Belieben erweitern.
function GetShellNodePath(Node: TTreeNode): string;
var Fldr : TShellFolder; begin Result := ''; if Assigned(Node) then begin Fldr := TShellFolder(Node.Data); if Assigned(Fldr) and DirectoryExists(Fldr.PathName) then Result := Fldr.PathName; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:55 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