Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TTreeView: Verzeichnisliste (https://www.delphipraxis.net/54507-ttreeview-verzeichnisliste.html)

Aike 5. Okt 2005 16:28


TTreeView: Verzeichnisliste
 
Hallöchen,

ich kann mir vorstellen, dass das hier schon 100 mal gefragt wurde, aber mit einschlägigen Suchbegriffen bin ich nicht weit gekommen :-(

Ich möchte einfach nur gerne, dass in einem TTreeView die Verzeichnisse eines Laufwerks aufgelistet werden. Gerne dürfen die Laufwerke auch die ersten Knotenpunkte im TreeView sein. Nachdem ein Ordner angeklickt wurde, sollte dann in einem Listview (oder Listbox?) die Dateien angezeigt werden, die in diesem Ordner liegen. *Rauft sich die Haare* Das kann doch so schwer nicht sein :-(

Ich habe schon was gefunden (Link), aber das dauert ziemlich lange und ich möchte keine 60sek warten, bis meine 10GB-Platte aufgelistet wurde :-/ Der Code von dort sieht so aus:
Delphi-Quellcode:
public  
    procedure FillTreeView(Path: String; RootNode: TTreeNode);
  end;

var
  Form1: TForm1;

implementation

procedure TForm1.FillTreeView(Path: String; RootNode: TTreeNode);
var sResult: Integer;
    SearchRec: TSearchRec;
    TempNode: TTreeNode;
begin
  sResult := FindFirst(Path+'\*.*',faDirectory,SearchRec);
  while sResult = 0 do
  begin
    if (SearchRec.Name = '.') or (SearchRec.Name = '..') then
    begin
      sResult := FindNext(SearchRec);
      Continue;
    end;
 
    if SearchRec.Attr and faDirectory = faDirectory then
    begin
      TempNode := TreeView1.Items.AddChild(RootNode,SearchRec.Name);
      FillTreeView(Path+'\'+SearchRec.Name,TempNode);
    end;
   
    sResult := FindNext(SearchRec);
  end;
  FindClose(SearchRec);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  FillTreeView(Edit1.Text,TreeView1.Items.Add(nil,Edit1.Text));
end;
Ich wäre für Hilfe/Links echt dankbar!

Grüße,
Aike

gsh 5. Okt 2005 16:35

Re: TTreeView: Verzeichnisliste
 
Es geht wahrscheinlich nicht viel schneller als du des da schon hast aber vieleicht hilft dir die Komponente ShellTreeView (Kategorie: Beispiele)

Aike 5. Okt 2005 16:41

Re: TTreeView: Verzeichnisliste
 
Ich möchte eigentlich nicht, dass der Benutzer den Namen etc. in dem TreeView ändern kann :-/ Da ist ja der ganz normale Windows-Explorer quasi drin.

[edit]
Na ja, gut, wenn's nicht anders geht ... Kann ich denn wenigstens eine Progress-Bar einfügen, damit ein Fortschritt erkennbar ist? Eher nicht, oder? Dann müsste ich erst wissen, wie viele Verzeichnisse es gibt und bei jedem Verzeichnis dann ein Prozent dazu geben etc.

Außerdem ergibt sich das neue Problem, dass ich den aktuellen Pfad herausfinden muss. Wenn ich also die Verzeichnisstruktur "C:\Dokumente und Einstellungen\Aike\Desktop\" habe, muss TreeView herausfinden, dass es gerade dort ist, denn eigentlich kennt es ja nur den letzten Knotenpunkt, und zwar "\Desktop\" :-(
[/edit]

Jens Schumann 5. Okt 2005 17:40

Re: TTreeView: Verzeichnisliste
 
Hallo,
es geht sogar wesentlich schneller. Z.Z. liest Aike alle Verzeichnisse ein.
das kann bei großen Platten mit vielen Verzeichnissen lange dauern.

Die Lösung ist: Lese nur die erste Ebene ein. D.h verzichte aufdie Rekursion.
Wenn der Anwender auf ein Verzeichnis im TTreeView klickt.
dann rufe FillTreeView ausgehend von diesem Verzeichnis auf.
So werden nur die Verzeichnisse gelesen, die der Anwender sehen
will.

Marphy 5. Okt 2005 18:15

Re: TTreeView: Verzeichnisliste
 
Hallo Aike,
wenn du nicht alles von Grund auf neu programmieren willst, könnten dir die VirtualShellTools weiterhelfen...

Gruß, Marco


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz