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
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
Comment