Entwickler-Ecke
Dateizugriff - Laufwerke mit TTreeview anzeigen
Stauch - Fr 15.11.02 11:12
Titel: Laufwerke mit TTreeview anzeigen
Hallo, ich nutze folgende Prozedur, um Verzeichnisse anzeigen zu lassen:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60:
| Procedure FindFilesTree (aTree: tTreeView; aPath: String; aNode: tTreeNode; aWithFiles: Boolean); Var SearchRec: tSearchRec; NodeTmp: tTreeNode; Info: pNodeInfo;
FirstNode : tTreeNode; s : string; Begin aTree.Items.BeginUpdate;
// Wenn am Ende der Pfadangabe noch kein \ steht, dieses hinzufügen If aPath [Length (aPath)] <> '\' Then aPath := aPath + '\'; If FindFirst (aPath + '*.*', faDirectory, SearchRec) = 0 Then Begin Repeat // Wenn es sich um ein Verzeichnis handelt If (SearchRec.Attr and faDirectory = faDirectory) and (SearchRec.Name[1] <> '.') Then Begin If (SearchRec.Attr and faDirectory > 0) then Begin New (Info); Info^.Path := True; Info^.Name := aPath + SearchRec.Name;
// zum aktuellen Eintrag hinzufügen aNode := aTree.Items.AddChildObject (aNode, SearchRec.Name, Info); End;
// Eintrag merken NodeTmp := aNode.Parent; // auf Untereinträge prüfen FindFilesTree (aTree, aPath + SearchRec.Name, aNode, aWithFiles); // Eintrag wiederholen aNode := NodeTmp; End Else // Eintrag ist eine Datei If aWithFiles and (SearchRec.Name <> '.') and (SearchRec.Name <> '..') Then Begin New (Info); Info^.Path := False; Info^.Name := aPath + SearchRec.Name;
aTree.Items.AddChildObject (aNode, SearchRec.Name, Info); End;
// solange weiter bis keine wieteren Dateien/Verzeichniss gefunden werden Until FindNext (SearchRec) <> 0;
FindClose (SearchRec); End;
aTree.Items.EndUpdate; End; |
(Ist auch aus dem Forum :-)) )
Ich habe jetzt zwei Probleme:
1.Beim Laufwerkswechsel kann ich die Treeview nicht löschen (Nach .clear tut ers nicht mehr)
2. Kann ich die Laufwerksbezeichnugen nicht mit eintragen lassen
Hilfe!!!
C.
Delete - Fr 15.11.02 13:50
Titel: Re: Laufwerke mit TTreeview anzeigen
Stauch hat folgendes geschrieben: |
Hallo, ich nutze folgende Prozedur, um Verzeichnisse anzeigen zu lassen ... (Ist auch aus dem Forum) |
Wenn die Funktion aus dem Forum ist, hätte es ein Link zu diesem Beitrag auch getan.
Zitat: |
1.Beim Laufwerkswechsel kann ich die Treeview nicht löschen (Nach .clear tut ers nicht mehr) |
Warum nicht? Bei mir geht´s problemlos. Aber ich nehme ja auch "Items.Clear". Du hättest also statt des funktionierenden Codes lieber den posten sollen, der
nicht funktioniert. :roll:
Zitat: |
2. Kann ich die Laufwerksbezeichnugen nicht mit eintragen lassen |
Mangels Interpunktionszeichen am Ende weiß ich nicht, ob das eine Aussage oder eine Frage ist. Ist es eine Aussage, dann widerspreche ich dir mit: Doch! Du musst eben "nur" die Volume-ID des Laufwerkes auslesen. Dazu müsste die Suchfunktion hier im Forum zumindest einen Link präsentieren, vielleicht sogar ein fertiges Beispiel ...
Dieses Wort bitte nur für echte Notfälle verwenden! Danke. :wink:
Stauch - So 17.11.02 21:30
Hallo Matthias,
Stimmt, der Link auf den Code hätte gereicht. Nur weil der entsprechende Beitrag gesperrt ist, kann er trotzdem gesehen werden ...
tree.item.clear statt tree.clear, genau da lag der Hase im Pfeffer. Dafür bin ich Junior-Member ;-))
Ok, der Hilferuf war auch übertrieben, ich gebs zu, aber ein halber Notfall liegt schon vor, da ich dieses Programm echt brauche und dieser Teil der einzig nicht funktionierende ist.
Ich nehm die Kritik an.
Danke für die Tips
C.
Delete - Mo 18.11.02 09:06
Herzlich Willkommen, Junior. :wink:
Wenn du noch Probleme haben solltest, die Laufwerksbezeichnung darzustellen, wie gesagt: mal fix die Suchfunktion bemühen, und im Notfall stehen dir meine Wenigkeit und alle anderen in AUQ gern mit ätzendem Spott und Hohn zur Seite ... :twisted:
Nee, im Ernst -
Musst halt ´ne Frage stellen, wenn noch was unklar ist.
Gruß.
Stauch - Mo 18.11.02 12:14
Ich merk das schon mit dem Spott ;-) Schön schön
Leider bleibt mein Problem bestehen. Nachdem ich atree.items.clear im oben geposteten Code eigefügt habe, klatscht das Programm ab mit der netten Meldung Zugriffsverletzung im Modul ...
Der Abbruch erfolgt beim Versuch einen neuen ChildNode anzulegen (AddCildNode) ??? Null Ahnung, was er da meckert :?:
C.
Delete - Mo 18.11.02 23:15
Meinst du die "EOutOfResources"-Exception?
Was die verursacht, weiß ich auch nicht. Aber das Problem lässt sich lösen, wenn du den Baum
vor dem Aufruf der o.g. Funktion leerst. Ich hab´s spaßeshalber mal mit einer DriveComboBox versucht und in deren "OnChange" folgendes geschrieben:
Quelltext
1: 2:
| TreeView1.Items.Clear; FindFilesTree(TreeView1,DriveComboBox1.Drive + ':\',nil,false); |
Geht. :)
Hast du Delphi 6 oder besser? Dann nimm doch den
ShellTreeView. Da hast du den Windows Explorer-Baum und musst nicht eine Zeile dafür programmieren. Zumal die Technik effizienter sein dürfte.
Bei großen Laufwerken mit vielen Verzeichnissen dauert es mit o.g. Funktion doch ein Weilchen, ehe der Baum fertig aufgebaut ist.
Stauch - Di 19.11.02 12:45
Genial, den Baum vor Aufruf zu löschen.
So einfach gehts also. 8)
ShellTreeView klingt gut ... leider nur Delphi 4 zur Verfügung
Danke C.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!