AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Alle Verzeichnisse in TTreeView - schnellere Lösung?
Thema durchsuchen
Ansicht
Themen-Optionen

Alle Verzeichnisse in TTreeView - schnellere Lösung?

Ein Thema von Sicho · begonnen am 12. Sep 2006 · letzter Beitrag vom 13. Sep 2006
Antwort Antwort
Seite 1 von 2  1 2      
Sicho

Registriert seit: 2. Mär 2006
18 Beiträge
 
Delphi 2006 Professional
 
#1

Alle Verzeichnisse in TTreeView - schnellere Lösung?

  Alt 12. Sep 2006, 10:57
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 dsdt.info

Delphi-Quellcode:
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;
Aufgerufen wird die Funktion dann wie folgt:

Delphi-Quellcode:
TreeView1.Items.BeginUpdate;
  GetDirs('f:\', TreeView1, nil);
  TreeView1.AlphaSort;
  TreeView1.Items.EndUpdate;
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.

Kann mir da jemand auf die Sprünge helfen?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Alle Verzeichnisse in TTreeView - schnellere Lösung?

  Alt 12. Sep 2006, 11:02
Lies nur die Eintrage der obersten Ebene ein und erst wenn die Knoten erweitert werden, liest du die eventuell vorhandenen Unterknoten ein.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Steve
Steve

Registriert seit: 2. Mär 2004
Ort: Würzburg
730 Beiträge
 
Delphi 2006 Personal
 
#3

Re: Alle Verzeichnisse in TTreeView - schnellere Lösung?

  Alt 12. Sep 2006, 11:08
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
Stephan B.
Wer andern eine Grube gräbt ist Bauarbeiter!
Wer im Glashaus sitzt, sollte sich lieber im Dunkeln ausziehen!
Außerdem dieser Satz kein Verb...
  Mit Zitat antworten Zitat
Sicho

Registriert seit: 2. Mär 2006
18 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Alle Verzeichnisse in TTreeView - schnellere Lösung?

  Alt 12. Sep 2006, 11:09
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
  Mit Zitat antworten Zitat
Sicho

Registriert seit: 2. Mär 2006
18 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Alle Verzeichnisse in TTreeView - schnellere Lösung?

  Alt 12. Sep 2006, 11:55
Zitat von Steve:
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
Ich kann die leider nicht finden
  Mit Zitat antworten Zitat
Benutzerbild von Steve
Steve

Registriert seit: 2. Mär 2004
Ort: Würzburg
730 Beiträge
 
Delphi 2006 Personal
 
#6

Re: Alle Verzeichnisse in TTreeView - schnellere Lösung?

  Alt 12. Sep 2006, 12:25
Hm evtl. gibts die Komponente nach D7 oder so nicht mehr?

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
Stephan B.
Wer andern eine Grube gräbt ist Bauarbeiter!
Wer im Glashaus sitzt, sollte sich lieber im Dunkeln ausziehen!
Außerdem dieser Satz kein Verb...
  Mit Zitat antworten Zitat
hsg

Registriert seit: 24. Apr 2006
Ort: Wustermark
354 Beiträge
 
Delphi 10.3 Rio
 
#7

Re: Alle Verzeichnisse in TTreeView - schnellere Lösung?

  Alt 12. Sep 2006, 12:27
Würde dir empfehlen TVirtualTreeView von Mike Lischke zu verwenden.
Dort gibt es auch ein Implementationen von ShellTreeViews (und -ListViews)

TVirtualTreeView wird mittlerweile auch von Borland selber verwendet.
  Mit Zitat antworten Zitat
Sascha L

Registriert seit: 4. Jun 2004
Ort: Hamm
390 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Alle Verzeichnisse in TTreeView - schnellere Lösung?

  Alt 12. Sep 2006, 12:29
Zitat von Sicho:

Ich kann die leider nicht finden
Musst man in den Unterordnern von Delphi schauen, da liegt irgendwo das Package, falls es nicht standardmäßig mit installiert wurde. Dann kannst du es manuell installieren.
Sascha
  Mit Zitat antworten Zitat
Sicho

Registriert seit: 2. Mär 2006
18 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Alle Verzeichnisse in TTreeView - schnellere Lösung?

  Alt 12. Sep 2006, 14:05
Zitat von Steve:
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).
hm..das Problem ist dass ich die entsprechenden Parameter ja dann (beim Aufruf des Events des TTreeview On Click) nicht mehr zur Verfügung habe... bzw. ich mit diesen kryptischen Variablennamen des UrsprungsCodes nicht viel anfangen kann, da ich nicht weiß, was er meint =/
  Mit Zitat antworten Zitat
Sicho

Registriert seit: 2. Mär 2006
18 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Alle Verzeichnisse in TTreeView - schnellere Lösung?

  Alt 12. Sep 2006, 14:06
Zitat von Sascha L:
Zitat von Sicho:

Ich kann die leider nicht finden
Musst man in den Unterordnern von Delphi schauen, da liegt irgendwo das Package, falls es nicht standardmäßig mit installiert wurde. Dann kannst du es manuell installieren.
auch das finde ich leider nicht. Wie ist der Name des Packages?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:06 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