AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi DAten der Festplatte in ner Treeview anzeigen
Thema durchsuchen
Ansicht
Themen-Optionen

DAten der Festplatte in ner Treeview anzeigen

Ein Thema von Kruemel2oo2 · begonnen am 29. Jun 2004 · letzter Beitrag vom 16. Jul 2004
Antwort Antwort
Seite 4 von 4   « Erste     234   
MathiasSimmack
(Gast)

n/a Beiträge
 
#31

Re: DAten der Festplatte in ner Treeview anzeigen

  Alt 30. Jun 2004, 18:59
*hüstel* Das sind die oben erwähnten
Zitat:
Hilfsfunktionen, um bspw. den Namen für den Baum und das Symbol zu ermitteln
Wenn du die in deinem Quelltext hast, aber möglicherweise hinter den Form-bezogenen Routinen, dann zieh sie nach vorn, also bspw:
Delphi-Quellcode:
unit bla;

{ ... }


implementation

function GetIdFromPath
{ bla bla bla }



procedure TForm1.FillTV;


end.
So sollte es aussehen, weil Delphi solche (nicht Form-bezogenen) Funktionen nur findet, wenn sie vor dem Aufruf deklariert sind.

Wenn du sie noch nicht in deinem Quelltext hattest, dann schäm dich! In dem Fall hast du den Code tatsächlich nur überflogen.
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#32

Re: DAten der Festplatte in ner Treeview anzeigen

  Alt 30. Jun 2004, 18:59
Ich muss hier mal was klarstellen.

Wenn der Explorer geöffnet wird, wird nicht die Festplatte oder sonstwas gescannt. Sondern es wird nur der Teil geladen, der gerade angezeigt wird.

Deswegen dauert auch das aufklappen eines Ordner's mit vielen Verzeichnen länger als mit nur einem.

Das vorgehen des Explorers ist ähnlich meines Postings (siehe weiter oben). So würde ich das auch mit FindFirst und FindNext erledigen.

Ich vermute mal das hinter dem IShellFolder auch nicht mehr steht, halt nur noch ein wenig komplexer.

Übrigens: FAT, EXT und NTFS wurden nicht gebaut um die ganze Platte mit einmal zu Scanner, dies ist nahwezu unmöglich bei heute 160 GB (davon vielleicht ca. 1,5 GB für die Verzeichnisstruktur, wenn sie voll ist)
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Kruemel2oo2

Registriert seit: 23. Jun 2004
65 Beiträge
 
#33

Re: DAten der Festplatte in ner Treeview anzeigen

  Alt 30. Jun 2004, 19:05
jo jetzt funzt das dauert wirklihc bischen lange. muss mir denn ma anschauen (bringt zwar nischt aba egal )

em könnte mir denn ma einer das mit dem TTreeNode erklären. bitte

bin einfach zu dumm
Alle Tippfehler dienen nur zur Belustigung und wurden mit voller Absicht gesetzt.


:-:-: [ich bin ein DAU ]:-:-:
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#34

Re: DAten der Festplatte in ner Treeview anzeigen

  Alt 30. Jun 2004, 20:41
Zitat von Kruemel2oo2:
jo jetzt funzt das dauert wirklihc bischen lange.
Nur beim ersten Mal. Bei jedem weiteren Versuch geht´s schneller.

Zitat:
em könnte mir denn ma einer das mit dem TTreeNode erklären. bitte
Was denn genau?

Zitat:
bin einfach zu dumm
Hm, und da meinst du, dass eine Erklärung noch was hilft.
  Mit Zitat antworten Zitat
Kruemel2oo2

Registriert seit: 23. Jun 2004
65 Beiträge
 
#35

Re: DAten der Festplatte in ner Treeview anzeigen

  Alt 30. Jun 2004, 21:54
jo bin lernfähig

naja wie ich das anwenden muss also ich hab nen Quelltext in nen Tutorial gefunden wie ich schon gescrieben habe aba die ausgabe ist in ner Listbox und nun will ich versuchen das durch den TTTreeNode in nen Treeview zu machen also ich kann ja ma den quelltext zeigen!

Code:
procedure GetFilesInDirectory(Directory: String; const Mask: String;
                              List: TStrings;
                              WithSubDirs, ClearList: Boolean);

procedure ScanDir(const Directory: String);
var
  SR: TSearchRec;
begin
  if FindFirst(Directory + Mask, faAnyFile - faDirectory, SR) = 0 then try
    repeat
      List.Add(Directory + SR.Name)
    until FindNext(SR) <> 0;
  finally
    FindClose(SR);
  end;

  if WithSubDirs then begin
    if FindFirst(Directory + '*.*', faAnyFile, SR) = 0 then try
      repeat
        if (SR.Attr = faDirectory) and
           (SR.Name <> '.') and (SR.Name <> '..') then
          ScanDir(Directory + SR.Name + '\');
      until FindNext(SR) <> 0;
    finally
      FindClose(SR);
    end;
  end;
end;

begin
  List.BeginUpdate;
  try
    if ClearList then
      List.Clear;
    if Directory = '' then Exit;
    if Directory[Length(Directory)] <> '\' then
      Directory := Directory + '\';
    ScanDir(Directory);
  finally
    List.EndUpdate;
  end;
end;
hier durch button click die ausgabe

Code:
procedure TForm1.Button1Click(Sender: TObject);
begin
  GetFilesInDirectory('C:\', '*.*', Listbox1.Items, True, True);
end;
naja und jetzt muss ich erstma raffen wie ich diesen TTTreeNode anwende um das nachern in ner Treeview auszugeben. und nu hoff ich das mir das einer ma so nen bischen erklären kann
Alle Tippfehler dienen nur zur Belustigung und wurden mit voller Absicht gesetzt.


:-:-: [ich bin ein DAU ]:-:-:
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#36

Re: DAten der Festplatte in ner Treeview anzeigen

  Alt 1. Jul 2004, 00:59
Zitat von Kruemel2oo2:
naja und jetzt muss ich erstma raffen wie ich diesen TTTreeNode anwende um das nachern in ner Treeview auszugeben. und nu hoff ich das mir das einer ma so nen bischen erklären kann
Du brauchst dir eigentlich nur die Funktion CreateTreeNode von dem Beispiel auf Seite 2 angucken. Diese könntest du abändern, in dem du statt dieses PIDL parameters direkt einen string-paramter für den Text des Knotens verwendest, z.B.
Delphi-Quellcode:
  function CreateTreeNode(hParent: TTreeNode; szCaption : string): TTreeNode;
  begin
Dann musst du nur noch die ScanDir Funktion so umbauen, das sie den aktuellen unterordner und den aktuellen TTreenode als Parameter entgegenehmen kann, z.B.

Delphi-Quellcode:
procedure ScanDir(const Directory: String; const SubDirectory: String; curtn : TTreeNode);
 var
  SR: TSearchRec;
  tn : TTreeNode;
begin
  tn := CreateTreeNode(curtn, SubDirectory);
Weiter unten rufst du ScanDir dann z.B. so auf:
ScanDir(Directory + SR.Name + '\', SR.Name, tn); Der erste Aufruf (noch weiter unten) sähe dann so aus:
ScanDir(Directory, Directory, nil); CreateTreeNode erstellt dann beim ersten Aufruf mit tv.Items.AddFirst() den Hauptknoten, weil das TreeView ja noch leer ist und deshalb beim ersten aufruf nil angegeben wird, das es noch keinen ParentNone (übergeordneten Knoten) gibt.
Bei den folgenden Aufrufen wird dann tv.Items.AddChild() verwendet, weil du ihm mit tn den TreeNode des aktuellen Ordners übergibst, in dem er ja dann einen Unterknoten erstellen soll.
  Mit Zitat antworten Zitat
Kruemel2oo2

Registriert seit: 23. Jun 2004
65 Beiträge
 
#37

Re: DAten der Festplatte in ner Treeview anzeigen

  Alt 1. Jul 2004, 16:24
hmpf alles subba erklärt fetten dank an alle bekomme es zwar noch net hin aba naja bin halt zu dumm für dieses scheiß TreeView ... naja kann man nischt machen. Aba an alle riesen fetten dank für die versuchte hilfe.

gruß Kruemel
Alle Tippfehler dienen nur zur Belustigung und wurden mit voller Absicht gesetzt.


:-:-: [ich bin ein DAU ]:-:-:
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#38

Re: DAten der Festplatte in ner Treeview anzeigen

  Alt 1. Jul 2004, 16:29
[TROST]
Keine sorge alles muss klein beginnen!
Das klappt schon! Bloß immer dran bleiben!
[/TROST]
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Tempel

Registriert seit: 15. Jul 2004
6 Beiträge
 
#39

Re: DAten der Festplatte in ner Treeview anzeigen

  Alt 15. Jul 2004, 20:30
Zitat von MathiasSimmack:
Da aber der Explorer bzw. die erwähnten VCL-Komponenten alle Partitionen in einer kürzeren Zeit scannen, ist in meinem Code noch irgendwo eine Bremse drin. Wie gesagt, wenn ich mal Muße habe, dann nehme ich mal den ShellShock-Code auseinander.
Hallo Mathias,

danke für die Funktion, hat mir einiges an Sucharbeit erspart

In deinem Code ist keine Bremse drin, du darfst nur nicht den ganzen Verzeichnisbaum auf einmal einlesen. Wenn du Scan nicht rekursiv aufrufts, sondern stattdessen "tn.HasChildren := true;" setzt, geht das einlesen fix. Nun must du nur noch beim Ereignis OnExpanding Scan aufrufen, wenn "TreeNode.Count = 0" ist. So wird der nächste Zweig erst erstellt, wenn man ihn öffnet.

Thomas
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#40

Re: DAten der Festplatte in ner Treeview anzeigen

  Alt 16. Jul 2004, 07:40
Danke für die Aufmunterung. Aber dann hätte ich noch einen besseren Vorschlag. Setze nicht einfach "HasChildren" auf true, sondern prüfe ob das überhaupt notwendig ist. Folgende Änderung im Code von "Scan" macht das:
Delphi-Quellcode:
          // wenn das aktuelle Element ein Ordner ist,
          // dann diese Prozedur erneut aufrufen und
          // den Ordner scannen lassen
          uAttr := SFGAO_CONTENTSMASK;
          iFolder.GetAttributesOf(1,pidlItem,uAttr);
          tn.HasChildren := (SFGAO_HASSUBFOLDER and uAttr <> 0);


Jetzt müsste man IMHO nur entweder den kompletten Pfad oder die PItemIdList des aktuellen Ordners im TTreeNode speichern (Stichwort: Data = pointer), dann kann man beim Anklicken eines Knotens die entsprechenden Unterordner laden. Denke ich ...


PS: Ich hänge einfach mal die nonVCL-Version ran, an der ich heute nebenbei gesessen habe. Es ist eine recht einfache Variante, die die jeweiligen IDs in einer Klasse speichert und jedem Knoten zuordnet. Daher geht das Scannen der Partition jetzt tatsächlich recht fix, und die Unterordner werden eigentlich erst beim Aufklappen "geladen".
Angehängte Dateien
Dateityp: zip tv-nonvcl.zip (11,4 KB, 71x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


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 05:08 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