![]() |
Alle Verzeichnisse in TTreeView - schnellere Lösung?
Hallo,
ich will in einem Programm alle Verzeichnisse eines Drives in einem TTreeView anzeigen lassen. Als ich im Internet nach einer Lösung gesucht habe (da ich noch nie vorher mit TTreeView gearbeitet habe), fand' ich folgenden, funktionierenden Code bei ![]()
Delphi-Quellcode:
Aufgerufen wird die Funktion dann wie folgt:
procedure GetDirs(const ADirectory: string; var Tree: TTreeView; Start: TTreeNode);
function SlashSep(const Path, S: string): string; begin if AnsiLastChar(Path)^ <> '\' then Result := Path + '\' + S else Result := Path + S; end; var SearchRec: TSearchRec; NewNode: TTreeNode; begin if FindFirst(SlashSep(ADirectory, '*.*'), faAnyFile, SearchRec) = 0 then begin try repeat if ((SearchRec.Attr and faDirectory) <> 0) then begin if ((SearchRec.Name <> '.') and (SearchRec.Name <> '..')) then begin NewNode:=Tree.Items.AddChild(Start, SearchRec.Name); GetDirs(SlashSep(ADirectory, SearchRec.Name), Tree, NewNode); end; end; until FindNext(SearchRec) <> 0; finally SysUtils.FindClose(SearchRec); end; end; end;
Delphi-Quellcode:
An und für sich funktioniert das auch, nur ist es sehr sehr langsam. Deswegen suche ich nun einen Weg, das ganze zu beschleunigen, ohne jetzt aber unbedingt all zu viel umstellen zu müssen.
TreeView1.Items.BeginUpdate;
GetDirs('f:\', TreeView1, nil); TreeView1.AlphaSort; TreeView1.Items.EndUpdate; Kann mir da jemand auf die Sprünge helfen? |
Re: Alle Verzeichnisse in TTreeView - schnellere Lösung?
Lies nur die Eintrage der obersten Ebene ein und erst wenn die Knoten erweitert werden, liest du die eventuell vorhandenen Unterknoten ein.
|
Re: Alle Verzeichnisse in TTreeView - schnellere Lösung?
Hi,
ab Delphi 6 gibt's auch ne Komponente "TShellTreeView" unter "Beispiele". Setz dort "Root" auf Dein gewünschtes Laufwerk und fertig... Ob Du damit das machen kannst, was Du vorhast, also ob das ein passender Ersatz für die TTreeView-Variante ist, weiß ich natürlich nicht, aber u.U. hilfts Dir ja weiter :) Gruß Stephan :dance: |
Re: Alle Verzeichnisse in TTreeView - schnellere Lösung?
Ich will ehrlich sein: ich werde aus dem Code nicht ganz besonders schlau (ist ja auch nicht kommentiert). Ich kann mir teilweise schon vorstellen wo was passiert, aber dennoch hapert es am Verständnis des mir vorliegenden Codes. Von daher weiß ich auch gar nicht wo und wie ich die von dir vorgeschlagene Änderung vornehmen sollte :|
|
Re: Alle Verzeichnisse in TTreeView - schnellere Lösung?
Zitat:
|
Re: Alle Verzeichnisse in TTreeView - schnellere Lösung?
Hm evtl. gibts die Komponente nach D7 oder so nicht mehr? :gruebel:
Zum Code: GetDirs wird rekursiv aufgerufen (Zeile 20). Lass diesen Aufruf weg, und dann werden die jeweiligen Unterverzeichnisse nicht gesucht. Dafür ruf im entsprechenden Ereignis, wenn ein Eintrag im TreeView ausgewählt wird, die Routine GetDirs mit entsprechenden Parametern auf (natürlich nur beim ersten mal). Gruß Stephan :dance: |
Re: Alle Verzeichnisse in TTreeView - schnellere Lösung?
Würde dir empfehlen
![]() Dort gibt es auch ein Implementationen von ShellTreeViews (und -ListViews) TVirtualTreeView wird mittlerweile auch von Borland selber verwendet. |
Re: Alle Verzeichnisse in TTreeView - schnellere Lösung?
Zitat:
|
Re: Alle Verzeichnisse in TTreeView - schnellere Lösung?
Zitat:
|
Re: Alle Verzeichnisse in TTreeView - schnellere Lösung?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:46 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