Ich lade bei Programmstart die Systemimagelist und weise sie dem
Treeview zu.Mit dieser Procedure lese ich das Verzeichnis ein.
Code:
Procedure FindFilesTree (aTree: tTreeView; aPath: String; aNode: tTreeNode; aWithFiles: Boolean);
Var
SearchRec: tSearchRec;
NodeTmp: tTreeNode;
Info: pNodeInfo;
fileinfo:Tshfileinfo;
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);
anode.ImageIndex:=1;
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;
SHGetFileInfo(PChar(aPath + SearchRec.Name), 0, FileInfo,
SizeOf(FileInfo), SHGFI_ICON or SHGFI_SMALLICON);
aTree.Items.AddChildObject (aNode, SearchRec.Name, Info);
anode.ImageIndex:=fileinfo.iIcon;
End;
// solange weiter bis keine wieteren Dateien/Verzeichniss gefunden werden
Until FindNext (SearchRec) <> 0;
FindClose (SearchRec);
End;
aTree.Items.EndUpdate;
End;
Ordnersymbol zuweisen funktioniert.
Dann erhalte ich eine Fehlermeldung.