![]() |
Re: DAten der Festplatte in ner Treeview anzeigen
*hüstel* Das sind die oben erwähnten
Zitat:
Delphi-Quellcode:
So sollte es aussehen, weil Delphi solche (nicht Form-bezogenen) Funktionen nur findet, wenn sie vor dem Aufruf deklariert sind.
unit bla;
{ ... } implementation function GetIdFromPath { bla bla bla } procedure TForm1.FillTV; end. Wenn du sie noch nicht in deinem Quelltext hattest, dann schäm dich! In dem Fall hast du den Code tatsächlich nur überflogen. :mrgreen: |
Re: DAten der Festplatte in ner Treeview anzeigen
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) |
Re: DAten der Festplatte in ner Treeview anzeigen
jo jetzt funzt das :D dauert wirklihc bischen lange. muss mir denn ma anschauen :D (bringt zwar nischt aba egal :D)
em könnte mir denn ma einer das mit dem TTreeNode erklären. bitte :D bin einfach zu dumm :( |
Re: DAten der Festplatte in ner Treeview anzeigen
Zitat:
Zitat:
Zitat:
|
Re: DAten der Festplatte in ner Treeview anzeigen
:D jo bin lernfähig :D
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:
hier durch button click die ausgabe
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;
Code:
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 :D
procedure TForm1.Button1Click(Sender: TObject);
begin GetFilesInDirectory('C:\', '*.*', Listbox1.Items, True, True); end; |
Re: DAten der Festplatte in ner Treeview anzeigen
Zitat:
Delphi-Quellcode:
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.
function CreateTreeNode(hParent: TTreeNode; szCaption : string): TTreeNode;
begin
Delphi-Quellcode:
Weiter unten rufst du ScanDir dann z.B. so auf:
procedure ScanDir(const Directory: String; const SubDirectory: String; curtn : TTreeNode);
var SR: TSearchRec; tn : TTreeNode; begin tn := CreateTreeNode(curtn, SubDirectory);
Delphi-Quellcode:
Der erste Aufruf (noch weiter unten) sähe dann so aus:
ScanDir(Directory + SR.Name + '\', SR.Name, tn);
Delphi-Quellcode:
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.
ScanDir(Directory, Directory, nil);
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. |
Re: DAten der Festplatte in ner Treeview anzeigen
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 :wall: ... naja kann man nischt machen. Aba an alle riesen fetten dank für die versuchte hilfe.
gruß Kruemel |
Re: DAten der Festplatte in ner Treeview anzeigen
[TROST]
Keine sorge alles muss klein beginnen! Das klappt schon! Bloß immer dran bleiben! [/TROST] |
Re: DAten der Festplatte in ner Treeview anzeigen
Zitat:
danke für die Funktion, hat mir einiges an Sucharbeit erspart :-D 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 |
Re: DAten der Festplatte in ner Treeview anzeigen
Liste der Anhänge anzeigen (Anzahl: 1)
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:
:stupid:
// 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". ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:19 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