Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Ordner auslesen und Dateien in ListView anzeigen?

  Alt 21. Apr 2004, 16:32
Moin Citybreaker,

ich hätte da ein simples Beispiel.
Dafür brauchst Du einen Button, ein Editfeld, ein Imagelist (Name muss auf ilFilter gestellt werden) und einen ListView (Name = lvFilter, SmallImages = ilFilter, ViewStyle = vsReport)
Ausserdem müssen die Units shlobj und shellapi eingebunden werden.

Das Editfeld dient hier nur der Eingabe einer Extension die dann, samt zugehörigem Icon, in den Listview eingetragen wird.
Die Extension muss dazu ohne Punkt eingegeben werden.

Delphi-Quellcode:
implementation
uses
  shlobj, // IShellFolder
  shellapi; // SHGetFileInfo

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);

var
  icWork : TIcon;
  sfWork : IShellFolder;
  fiWork : TSHFileInfo;

begin
    icWork := TIcon.Create;
    try
      lvFilter.Items.Add;
      lvFilter.Items[lvFilter.Items.Count-1].Caption := Edit1.Text;
      // Ermitteln des Icons
      SHGetFileInfo(
        PChar('*.'+Edit1.Text), // Die gewünschte Extension übergeben
        0, // Kein spezielles Dateiattribut angegeben (z.B. ReadOnly)
        fiWork, // Hier wird das Ergebnis abgelegt
        SizeOf(fiWork), // Grösse des Ergebnisses
          SHGFI_ICON // hIcon in fiWork füllen
          or
          SHGFI_SMALLICON // das Handle des kleinen Icons ermitteln
          or
          SHGFI_USEFILEATTRIBUTES // Der erste Parameter enthält i.d.R. den Pfad zu einer
                                  // vorhandenen Datei.
                                  // Mit diesem Flag wird das nicht geprüft, so dass die Angabe
                                  // einer Extension ausreicht das Icon zu erhalten
                                  // Enthält der Parameter einen gültigen Pfad, so kann dieses
                                  // Flag auch weggelassen werden
      );
      // Handle des Icons an Iconobjekt übergeben
      icWork.Handle := fiWork.hIcon;
      // Damit es
      // 1. der Imageliste hinzugefügt werden kann
      // 2. der Eintrag im Listview dieses Icon bekommt
      lvFilter.Items[lvFilter.Items.Count-1].ImageIndex := ilFilter.AddIcon(icWork);
    finally
      FreeAndNil(icWork);
    end;
end;

procedure TForm1.FormDestroy(Sender: TObject);

var
  icWork : TIcon;

begin
  // Imageliste leeren und Icons aus der Systemimagelist
  // wieder zerstören
  icWork := TIcon.Create;
  try
    while ilFilter.Count > 0 do begin
      ilFilter.GetIcon(ilFilter.Count-1,icWork);
      ilFilter.Delete(ilFilter.Count-1);
      DestroyIcon(icWork.Handle);
    end;
  finally
    FreeAndNil(icWork);
  end;
end;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat