![]() |
eigene Ordnerstruktur in TreeView
Hallo zusammen,
Ich habe ein tStringList welches etwa wie folgt aussieht: Ordner\ Ordner\A Ordner\A\B Ordner2\C\D nun möchte ich die Strings in ein TreeView einlesen (das ist auch kein problem), jedoch möchte ich dass das dann so aussieht: - Ordner -A -B - Ordner2 -C -D Es sollen also die Ordner nicht einfach blind eingefügt werden, sondern si sollen strukturiert alls unterordner eingefügt werden. Vielleicht liese sich das durch Rekursion lösen.... :gruebel: Bringe es einfach nicht hin! Danke!!!! |
Re: eigene Ordnerstruktur in TreeView
teste mal eine Struktur in TTreeview, speichere diese und schaue dir an, wie sie ausieht.
So musst Du dann die uin TStringlist anlegen und kannst diese ohne viel zu prog. per LoadFromFile sogar direkt in TTreeview einlesen. |
Re: eigene Ordnerstruktur in TreeView
Ich glaube du hast mich falsch verstanden: ich weiss wie ich untereinträge einfüge, ich suche nur nach etwas code um z.b aus dem String ordner\A\ ein parent Ordner und ein child A zu erstellen:
-Ordner -A Das schwierige ist dass es mit beliebig vielen unterordnern funktionieren soll! |
Re: eigene Ordnerstruktur in TreeView
Hallo Philippe,
es wäre natürlich toll, wenn die Pfadnamen in der StringList bereits in dem Format vorliegen würden, welches die TreeView selbst als Textrepräsentation kennt, aber ausgehend von deinen Beispieldaten kannst du so vorgehen:
Delphi-Quellcode:
Freundliche Grüße
function PathToNode(s: string; tn: TTreeNodes): TTreeNode;
var dir, subDir: string; begin dir := ExcludeTrailingPathDelimiter(s); subDir := ExtractFileName(dir); dir := ExtractFileDir(dir); if dir = '' then Result := tn.AddChild(nil, subDir) else Result := tn.AddChild(PathToNode(dir, tn), subDir) end; procedure PathesToNodes(s: TStrings; tn: TTreeNodes); var i: Integer; begin for i := 0 to Pred(s.Count) do PathToNode(s[i], tn); end; procedure TDemoForm.ButtonClick(Sender: TObject); var i: Integer; sl: TStringList; begin sl := TStringList.Create; sl.Assign(Memo.Lines); sl.Sorted := True; for i := sl.Count - 2 downto 0 do if AnsiStartsText(sl[i], sl[Succ(i)]) then sl.Delete(i); TreeView.Items.Clear; PathesToNodes(sl, TreeView.Items); sl.Free; end; |
Re: eigene Ordnerstruktur in TreeView
Vielen Dank, das ist genau wonach ich gesucht habe!!! Es gibt nur noch ein Problem wenn ein Ordner mehrere Unterordner hat, so werden die Parents mehrfach erstellt:
statt Ordner -a -b gibt es ordner -a ordner -b |
Re: eigene Ordnerstruktur in TreeView
Das hatte ich nicht bedacht, aber jetzt:
Delphi-Quellcode:
Gute Nacht
function PathToNode(s: TStrings; tn: TTreeNodes; path: string): TTreeNode;
var dir, subDir: string; index: Integer; begin subDir := ExtractFileName(path); dir := ExtractFileDir(path); if dir = '' then begin index := s.IndexOf(subDir); if index < 0 then Result := nil else Result := TTreeNode(s.Objects[index]); if not Assigned(Result) then Result := tn.AddChild(nil, subDir); end else begin index := s.IndexOf(dir); if index < 0 then Result := nil else Result := TTreeNode(s.Objects[index]); if Assigned(Result) then Result := tn.AddChild(Result, subDir) else Result := tn.AddChild(PathToNode(s, tn, dir), subDir); end; end; procedure PathesToNodes(s: TStrings; tn: TTreeNodes); var i: Integer; begin for i := 0 to Pred(s.Count) do s.Objects[i] := PathToNode(s, tn, s[i]); end; procedure TDemoForm.ButtonClick(Sender: TObject); var i: Integer; sl: TStringList; begin sl := TStringList.Create; sl.Assign(Memo.Lines); sl.Sort; for i := sl.Count - 2 downto 0 do if SameText(sl[i], sl[Succ(i)]) or (sl[i] = '') then sl.Delete(i) else sl[i] := ExcludeTrailingPathDelimiter(sl[i]); sl.Sorted := True; TreeView.Items.Clear; PathesToNodes(sl, TreeView.Items); sl.Free; end; |
Re: eigene Ordnerstruktur in TreeView
sag mal, wieso nimmste nicht einfach 'n shelltreeview? einfach auf diene form ziehen und schon hast deine ordner schön dargestellt :-)
|
Re: eigene Ordnerstruktur in TreeView
Danke viel mals! Funktioniert super!!!!
an grenzgaenger: geht nicht, da es sich um ordner handelt, welche in einem Archiv sind, wie kann ich die denn in ein ShellTreeView bringen, da kann ich ja nur "echte" Ordner anzeigen... |
AW: eigene Ordnerstruktur in TreeView
Hi,
im moment bin ich auch an so einer stelle. Ich glaube ich bin zu dusselig da zu. Im moment stehe ich total auf dem schlauch. Ich habe es so ähnlich wie Weazy. Aber bei mir schmeisst sich das teil mit einem StackOverflow weg. Meine zeilen sehen wie folgt aus. Wär toll wenn mir da jemand helfen könnte. Wie gesagt, im moment stehe ich auf dem schlauch und komme an dieser stelle nicht weiter. C:\WINXP\system\ C:\WINXP\system32\ C:\WINXP\system32\1031\ C:\WINXP\system32\1033\ C:\WINXP\system32\argosoft\ C:\WINXP\system32\CatRoot\{127D0A1D-4EF2-11D1-8608-00C04FC295EE}\ C:\WINXP\system32\CatRoot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\ C:\WINXP\system32\CatRoot2\ C:\WINXP\system32\CatRoot2\{127D0A1D-4EF2-11D1-8608-00C04FC295EE}\ C:\WINXP\system32\CatRoot2\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\ C:\WINXP\system32\Com\ C:\WINXP\system32\config\ C:\WINXP\system32\config\systemprofile\ usw.... Da dürfte ja dann nur ein WINXP mit einem + sein, ein system ohne + und nur ein system32 mit einem + Danke im voraus |
AW: eigene Ordnerstruktur in TreeView
Hallo,
schau dir das mal an: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:09 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 by Thomas Breitkreuz