Irgendwie sieht mir das zu kompliziert aus. Ginge das nicht auch einfach so (aus dem Kopf getippt, daher ungetestet)?
Delphi-Quellcode:
procedure TForm1.ShowDirectory(_Tree: TTreeView; const _sVerzeichnis: string; _KnotenRoot: TTreeNode);
{$region 'Kommentar ShowDirectory( _Tree:TTreeView, _sVerzeichnis:string, _Eintrag:TTreeNode, )'}
{*
Beschreibung : Procedur baut aus einer Pfadangabe einen TreeView
@param _Tree : der Tree der neu erstellt wird
@param _sVerzeichnis : das QuellVerzeichnis aus dem der Tree entsteht
@param _Eintrag : der erste Startknoten
}
{$endregion}
var
SearchRec : TSearchRec;
KnotenNeu : TTreeNode;
verz : string;
begin
Assert(Assigned(_Tree));
verz := IncludeTrailingPathDelimiter(_sVerzeichnis);
_Tree.Items.BeginUpdate;
try
if FindFirst(verz + '*.*',faDirectory, SearchRec) = 0 then
try
repeat
if (SearchRec.Attr and faDirectory = faDirectory) and
(SearchRec.Name <> '.') and
(SearchRec.Name <> '..') then
begin
KnotenNeu := _Tree.Items.AddChild(_KnotenRoot, SearchRec.Name);
ShowDirectory(_Tree, verz + SearchRec.Name, KnotenNeu);
end;
until FindNext(SearchRec) <> 0 ;
finally
FindClose(SearchRec);
end;
finally
_Tree.Items.EndUpdate;
end;
end;
[edit] Achja, BeginUpdate und EndUpdate sind wohl in der aufrufenden Routine besser aufgehoben als in der Rekursion. Trotzdem lass ich das erstmal so. [/edit]