![]() |
Verzeichnis im Listview darstellen
Guten Abend,
ich habe bereits in der Delphi Hilfe und im Delphi Forum gesucht, aber nichts genaues dazu gefunden. Meine Frage: Wie kann ich ein Verzeichnis auf der Festplatte, welches man durch eine TShellComboBox wählt, in einem ListView darstellen? Die Lösung ist sicherlich sehr einfach, nur komm ich leider nicht drauf :wall: MfG |
Re: Verzeichnis im Listview darstellen
Liste der Anhänge anzeigen (Anzahl: 1)
HI ,
ist doch eigendlich ganz einfach, mit FindFirst und FindNext. Damit füllst Du 2 Listen eine für die Dateien und die andere List mit den Verzeichnissen. Dann die Listen sortieren und das Listview füllen :wink: Habe in alten Sachen was dazu gefunden:
Delphi-Quellcode:
CalcFileSize(SRec) macht nichts weiter als bei (SRec.Attr and faDirectory) = faDirectory
type
PSRec = ^TSRec; TSrec = record Attr : Array[0..4] of Char; Name : String; Size : String; Time : TDateTime; end; var SearchRec : pSRec; FChangeDir : String; function Compare(Item1, Item2: Pointer): Integer; begin Result := CompareText(PSRec(Item1).Name, PSRec(Item2).Name); end; procedure CalcAttributes(FindData : TSearchRec; var Attributes : Array of Char); begin FillChar(Attributes, SizeOf(Attributes), ' '); if (FindData.Attr and faARCHIVE) = faARCHIVE then Attributes[0] := 'A'; if (FindData.Attr and faREADONLY) = faREADONLY then Attributes[1] := 'R'; if (FindData.Attr and faHIDDEN) = faHIDDEN then Attributes[2] := 'H'; if (FindData.Attr and faSYSFILE) = faSYSFILE then Attributes[3] := 'S'; if (FindData.Attr and faDIRECTORY) = faDIRECTORY then Attributes[4] := 'D'; end; procedure FindFolders(var FolderList : TList; var NonFolderList : TList); var SRec : TSearchRec; begin if FindFirst('*.*', faAnyFile, SRec) = 0 then begin repeat if (SRec.Name <> '.') and (SRec.Name <> '..') then begin SearchRec := New(pSRec); with SearchRec^ do begin Name := SRec.Name; Time := FileDateToDateTime(SRec.Time); Size := CalcFileSize(SRec); end; CalcAttributes(SRec, SearchRec^.Attr); if (SRec.Attr and faDirectory) = faDirectory then FolderList.Add(SearchRec) else NonFolderList.Add(SearchRec); end; until FindNext(SRec) <> 0; FindClose(SRec); end; FolderList.Sort(Compare); NonFolderList.Sort(Compare); end; die Größenbezeichnung = "Verzeichnis" zurück zu geben. Da FindFirst('*.*' ohne Path aufgerufen wird, muss Du Dich selber darum kümmern, vieleicht so:
Delphi-Quellcode:
Wenn Du alles richtig verstanden und umgesetzt hast kann es so aussehen:
...
var FolderList : TList; NonFolderList : TList; FCurrDir : String; begin if FChangeDir[Length(FChangeDir)] <> '\' then FChangeDir := FChangeDir + '\'; if DirectoryExists(FChangeDir) then begin GetDir(0, FCurrDir); ChDir(FChangeDir); lvFolders.Items.BeginUpdate; lvFolders.Items.Clear; FolderList := TList.Create; try NonFolderList := TList.Create; try FindFolders(FolderList, NonFolderList); InsertItems(FolderList); InsertItems(NonFolderList); finally NonFolderList.Free; end; finally FolderList.Free; end; lvFolders.Items.EndUpdate; ChDir(FCurrDir); end; end; |
Re: Verzeichnis im Listview darstellen
Du kannst natürlich auch einfach die TShellListView nehmen und die ggf. erweitern. Bei der TShellComboBox gibt es das Property Listview o.ä., was du einfach mit der TShellListview verbinden kannst....
Dann brauchst du dich gar nicht darum kümmern. |
Re: Verzeichnis im Listview darstellen
Vielen Dank es geht,
nun muss ich nur noch rausfinden wie ich ein ShellListView mit IdFTP verbinde. MfG |
Re: Verzeichnis im Listview darstellen
Gar nicht. Der ShellListview arbeitet intern mit den API-Funktionen FindFirstFile und FindNextFile. Nur leider haben die mit dem FTP Protokoll rein gar nichts am Hut. Da wirst du wohl die List Methode deiner FT-Komponenten bemühen müssen, um per FTP ein Verzeichnis aufgelistet zu bekommen.
|
Re: Verzeichnis im Listview darstellen
Ok, danke.
Werde dann eine "normale" ListView nehmen. MfG |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz