Autor Beitrag
Stauch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 140

Win 2000, Win XP
D4
BeitragVerfasst: Fr 15.11.02 11:12 
Hallo, ich nutze folgende Prozedur, um Verzeichnisse anzeigen zu lassen:
ausblenden volle Höhe 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.

_________________
Geht das? Und wenn ja, warum nicht?
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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. :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 ...

Zitat:
Hilfe!!!

Dieses Wort bitte nur für echte Notfälle verwenden! Danke. :wink:
Stauch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 140

Win 2000, Win XP
D4
BeitragVerfasst: 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



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 140

Win 2000, Win XP
D4
BeitragVerfasst: 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



BeitragVerfasst: 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 140

Win 2000, Win XP
D4
BeitragVerfasst: 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?