Einzelnen Beitrag anzeigen

Markus K.

Registriert seit: 26. Jan 2004
Ort: Halle
346 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Ordner in treeview/ listview ausgeben

  Alt 3. Jun 2004, 22:34
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
  Mit Zitat antworten Zitat