Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Verzeichnis in einer ListView darstellen (https://www.delphipraxis.net/27926-verzeichnis-einer-listview-darstellen.html)

elKe 17. Aug 2004 14:13


Verzeichnis in einer ListView darstellen
 
Hi,

ich habe schon erfolglos die Suchfunktion betätigt.

Wie kann ich ein Verzeichnis in eine ListView laden?
//edit: Ich habe kein Delphi 6 oder höher, also kommt die ShellListView nicht in Frage!

danke :)

MathiasSimmack 17. Aug 2004 14:21

Re: Verzeichnis in einer ListView darstellen
 
Der einfache Weg (allerdings nicht ganz authentisch): Hier im Forum suchenFindFirst FindNext. Alternativ fallen mir die [dp]"ShellShock"[/dp]-Komponenten ein, die Christian Seehase mal erwähnt hat. Oder du machst es selbst mit den Shell-Funktionen, die dir vom System zur Verfügung gestellt werden und die auch der Explorer benutzt (und die ShellShock-Komponenten). Aber das ist viel Arbeit. Wir hatten kürzlich ein paar Themen dazu. Wenn ich jetzt noch wüsste, welchen Suchbegriff ich anbieten könnte. Hm ... Hier im Forum suchenSHGetDesktopFolder Explorer. Ja, das müsste klappen. ;)

elKe 17. Aug 2004 14:38

Re: Verzeichnis in einer ListView darstellen
 
erstmal danke! :)
Mal guggen, was sich finden lässt!

elKe 18. Aug 2004 09:44

Re: Verzeichnis in einer ListView darstellen
 
also ich hab hier jetzt sowas da gefunden:

Delphi-Quellcode:
procedure TForm1.ListView2DblClick(Sender: TObject);
var
  ds : TSearchRec;
  res : integer;
  li : TListItem;
  fi : TSHFileInfo;
  drive: string;
begin
  drive := ListView2.Selected.caption;
  ListView3.Items.Clear;

  res := FindFirst(drive + '*.*', faAnyFile,ds);
  while(res = 0) do
  begin
    if(ds.Attr and faDirectory = 0) and
      (ds.Name <> '.') and
      (ds.Name <> '..') then
    begin
      // Name der Datei eintragen
      li := Listview3.Items.Add;
      li.Caption := ds.Name;

      // jetzt Zugriff auf die System-Imageliste
      // und nur den Typennamen und das Symbol
      // ermitteln! 
      ZeroMemory(@fi,sizeof(fi));
      SHGetFileInfo(pchar(drive + ds.Name),0,fi,sizeof(fi),
        SHGFI_ICON or SHGFI_SYSICONINDEX or SHGFI_TYPENAME);

      // Icon-Index zuweisen, ...
      li.ImageIndex := fi.iIcon;
      // "iIcon" ist eine Integer-Variable und erhält somit
      // wirklich nur den Index auf das Symbol, aber nicht
      // das Symbol als solches. Daher ist es nun egal, wie
      // oft ein Dateityp im Ordner vorkommt.


      // ... & Typennamen als Untereintrag hinzufügen
      li.SubItems.Add(fi.szTypeName);
    end;

    res := FindNext(ds);
  end;
  FindClose(ds);
end;
listView2 ist dabei eine auflistung der laufwerke.

jetzt meine frage: wie kann ich in der listview nicht nur enthaltene dateien sondern auch enthaltene ordner anzeigen lassen?

CalganX 18. Aug 2004 09:52

Re: Verzeichnis in einer ListView darstellen
 
Hi,
Zitat:

Zitat von elKe
Delphi-Quellcode:
    if(ds.Attr and faDirectory = 0) and

hier gehst du davon aus, dass du keine Verzeichnisse haben willst. Folglich musst du diesen Teil der Abfrage rausnehmen.
Aber du musst aufpassen mit SHGetFileInfo. Ich glaube das kommt mit Verzeichnissen nicht ganz klar.

Chris

elKe 18. Aug 2004 09:53

Re: Verzeichnis in einer ListView darstellen
 
mal ausprobieren
//edit jop geht! danke!

MathiasSimmack 18. Aug 2004 10:01

Re: Verzeichnis in einer ListView darstellen
 
Zitat:

Zitat von Chakotay1308
Aber du musst aufpassen mit SHGetFileInfo. Ich glaube das kommt mit Verzeichnissen nicht ganz klar.

Glaubst du. ;)

elKe 18. Aug 2004 10:20

Re: Verzeichnis in einer ListView darstellen
 
bei mir gehts :) ^^

ähm.. wie kann ich das jetzt nach Ordnern und Dateien sortieren lassen? (Wie im Explorer auch)

Hab keinen Plan, wie ich das anstellen soll. Obwohl, wie kann man nach Spalten in ner LsitView sortieren? .. Mal in der Code-Library guggen. :)

//edit: verwende den Code hier: http://www.delphipraxis.net/internal...ct.php?t=23835

Funktioniert mit der ersten Spalte auch prima, aber wenn ich die zweite spalte sortieren will:
"Der Index der Liste überschreitet das Maximum (0)"

Wie krieg ich den Fehler weg?

//nochn edit: Fehler behoben, die erste Zeile hatte nur kein SubItem, das war der Fehler! :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz