Ich rufe SHGetFileInfo in InitNode auf. Das heißt es wird nur ein Icon geladen, wenn es benötigt wird. Ich dachte eigentlich immer, dass das helfen würde.
CoInitialize und CoUnInitialize um SHGetFileInfo hat hier nichts gebracht leider.
Fülle die ImageList mit allen Icons und hole dir dann den Index aus der ImageList vom Icon das du benötigst für die jeweilige Node.
Dafür ist sie da!
Ich mache hier auch nichts anderes.
Delphi-Quellcode:
if hLarge = 0
then
begin
hLarge := ImageList_Create(round(bw), round(bh), ILC_COLOR32, 1, 1);
// 32 Bit Bitmap konvertiert zu Icon
ListView_SetImageList(
Handle, hLarge, LVSIL_NORMAL);
end;
// Icon zur Liste addieren
ImageList_AddIcon(hLarge, hIconItem);
SetLength(ItemsInfo, nItem + 1);
ItemsInfo[nItem].Item := nItem;
ItemsInfo[nItem].SubItem := nSubItem;
ItemsInfo[nItem].Width := round(bw);
ItemsInfo[nItem].Height := round(bh);
ItemsInfo[nItem].ImgIcon := hIconItem;
ItemsInfo[nItem].IdentStr := ImgIdent;
// Icon freigeben
// wird nicht mehr verwendet da in der ImageList enthalten
DestroyIcon(hIconItem);
Ok ist für ein ListView und
Win32 Api aber in der Funktionsweise das gleiche.
Wenn ich jedes Icon extra laden würde
oh..
oh.. das wird nix.
Image list erstellen
Icon addieren
Handle löschen.