Announcement

Collapse
No announcement yet.

Anzeigen des mit einer Datei assozierten Icons

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Anzeigen des mit einer Datei assozierten Icons

    Ich suche mit den Windows-Funktionen FindFirstFile und FindNextFile nach Dateien und schreibe die gefundenen Dateien zunächst in einen Record und anschließend in ein erweitertes StringGrid, das dann später weiterverarbeitet werden soll. Dies funktioniert einwandfrei und ist auch sehr schnell.

    In dem erweiterten StringGrid möchte ich jedoch auch das mit der Datei assozierte Icon anzeigen. Dies ermittele ich derzeit mit etwa folgendem Code:

    <PRE>
    var
    FileInfo: TSHFileInfo;
    intFlags: Integer;
    ...
    begin
    intFlags := SHGFI_SYSICONINDEX or SHGFI_SMALLICON or SHGFI_OPENICON or SHGFI_TYPENAME;
    ...
    FillChar(FileInfo, SizeOf(FileInfo), 0);
    SHGetFileInfo(PChar(strDirectory + strDateiname), 0, FileInfo, SizeOf(FileInfo), intFlags);
    Suchergebnis[linAnzDateien].Dateityp := FileInfo.szTypeName;
    if FileInfo.iIcon > 0 then Suchergebnis[linAnzDateien].IconIndex := FileInfo.iIcon;
    ...
    end;
    </PRE>

    Die System-Icons habe ich vorher in eine TImageList geladen.
    Auch das Anzeigen des Icons im StringGrid funktioniert einwandfrei.

    Mein Problem ist jedoch, dass das Auslesen des Icons bei vielen gefundenen Dateien sehr lange dauert. In Programmen, die statt einem StringGrid die Komponente TListView verwenden, werden die Icons wesentlich schneller angezeigt.

    Frage:
    Woran liegt das?
    Gibt es eine andere (schnellere) Methode, um an den Index des System-Icons zu kommen?

    Reinhold

  • #2
    Hallo Reinhold,

    Dein Beitrag ist zwar schon ziemlich alt und ich habe auch keine Lösung für Dich.

    Aber für mich wäre es sehr interresant, wie Du die System-Icons in eine TImageList geladen hast.

    Gruß<br>
    Thoma

    Comment


    • #3
      SHGetFileInfo() macht diesen Job. Mal in der Hilfe nachlesen. Wichtig: das zurückgegebene ImageList.Handle muß einer TImageList Komponenten zugewiesen werden das .Shared := True hat.<br>

      @Reinhold: Schneller gehts mit dieser Methode nicht, es sei denn der TListView holt für jeden Dateityp nur einmal den IconIndex und setzt dann diesen Index für alle Items mit gleicher Extension.

      Gruß Hage

      Comment

      Working...
      X