Hallo Matthis,
hier ist eine Lösung von mir, welche du noch deinen Ansprüchen anpassen musst.
Delphi-Quellcode:
public
{ Public-Deklarationen }
Procedure BaumErzeugen(TreeNode:TTreeNode);
Procedure BaumErstellen(Ordner,Wurzel:String);
Function VerzeichnisErmitteln(Node:TTreeNode):string;
end;
var
Form1: TForm1;
Wurzel: String='C:\';
implementation
{$R *.dfm}
procedure TForm1.BaumErstellen(Ordner,Wurzel:String);
var TreeNode:TTreeNode;
begin
TreeView1.Items.Clear;
TreeNode:=TreeView1.Items.AddChild(nil,Ordner);
TreeView1.Items.AddChild(TreeNode,'dummy');
end;
procedure TForm1.TreeView1Expanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
begin
TreeView1.Items.BeginUpdate;
Node.DeleteChildren;
BaumErzeugen(Node);
TreeView1.Items.EndUpdate;
end;
Procedure TForm1.BaumErzeugen(TreeNode:TTreeNode);
var Pfad:String;
Suche:TSearchRec;
TNode:TTreeNode;
begin
if TreeNode=nil then Exit;
Pfad:=Wurzel+VerzeichnisErmitteln(TreeNode);
if FindFirst(Pfad+'*.*',faDirectory,Suche) = 0 then
repeat if ((Suche.Attr and faDirectory)=faDirectory) and (Suche.Name<>'.') and (Suche.Name<>'..')
then begin
TNode:=TreeView1.Items.AddChild(TreeNode,Suche.Name);
TreeView1.Items.AddChild(TNode,'dummy');
end
else
if Suche.Name[1] <> '.'
then TNode:=TreeView1.Items.AddChild(TreeNode,Suche.Name);
until FindNext(Suche)<>0;
FindClose(Suche);
end;
Function TForm1.VerzeichnisErmitteln(Node:TTreeNode):String;
var S:String;
TreeNode:TTreeNode;
begin
Result:='';
if Node=nil then Exit;
S:=Node.Text;
TreeNode:=Node;
while TreeNode.Parent<>nil do
begin
TreeNode:=TreeNode.Parent;
S:=TreeNode.Text+'\'+S;
end;
Result:=S+'\';
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
BaumErstellen('Windows',Wurzel);
end;
Der Code erstellt einen Verzeichnisbaum in der TreeView-Komponente, dabei gibt der String Ordner den Ordner an, welcher angezeigt werden soll, und Wurzel den Pfad zu diesem Ordner. Wenn du nun einen Pfad angibst musst du nur noch den Pfad nach Ordner und Wurzel unterteilen.
Tschüß Markus