Autor |
Beitrag |
Stauch
      
Beiträge: 140
Win 2000, Win XP
D4
|
Verfasst: Fr 15.11.02 11:12
Hallo, ich nutze folgende Prozedur, um Verzeichnisse anzeigen zu lassen:
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.
_________________ Geht das? Und wenn ja, warum nicht?
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 15.11.02 13:50
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.
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. 
|
|
Stauch 
      
Beiträge: 140
Win 2000, Win XP
D4
|
Verfasst: 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.
_________________ Geht das? Und wenn ja, warum nicht?
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 18.11.02 09:06
Herzlich Willkommen, Junior.
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 ...
Nee, im Ernst -
Musst halt ´ne Frage stellen, wenn noch was unklar ist.
Gruß.
|
|
Stauch 
      
Beiträge: 140
Win 2000, Win XP
D4
|
Verfasst: 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.
_________________ Geht das? Und wenn ja, warum nicht?
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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 
      
Beiträge: 140
Win 2000, Win XP
D4
|
Verfasst: 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.
_________________ Geht das? Und wenn ja, warum nicht?
|
|
|