Du extrahierst zwei Icons pro Aufruf von ExtractIconEx, also musst du auch beide zerstören. Oder du castest so, dass nur ein Icon extrahiert wird:
ExtractIconEx(PChar(AFileName), AIndex, Result, HICON(nil^), 1);
Auch der Aufruf von ExtractIconEx(PChar(AFileName), -1, ...) könnte Icons extrahieren; die Doku zu
ExtractIconEx ist da leider nicht präzise genug. Geht's dabei nur um Ermittlung der Anzahl der vorhandenen Icons, setze beide HIcon-Parameter auf NULL (siehe oben).
Grüße
Dalai
Ich kann jetzt nicht erkennen wo ich 2 Icons pro Aufruf extrahiere..
Du meinst das LDummy + Result?
ja ich sehe es gerade
Danke.. kann mir dann das LDummy sparen..
Delphi-Quellcode:
function TSkinPopUpMenu.GetHIconFromFile(AFileName: PWideChar; ASmall: Boolean; AIndex: Integer)
: HIcon;
var
LInfo: TSHFileInfo;
begin
Result := 0;
If ExtractIconEx(AFileName, -1, Result, HICON(nil^), 0) <> 0 then // << denke das sollte so ausreichen
begin
If ASmall then
ExtractIconEx(AFileName, AIndex, HICON(nil^), Result, 1)
else
ExtractIconEx(AFileName, AIndex, Result, HICON(nil^), 1);
end
else
begin
SHGetFileInfo(PWideChar(ExtractFileExt(AFileName)), FILE_ATTRIBUTE_NORMAL, LInfo,
SizeOf(LInfo), IfThen(ASmall, SHGFI_SMALLICON, SHGFI_LARGEICON)
or SHGFI_ICON or SHGFI_LINKOVERLAY or SHGFI_USEFILEATTRIBUTES);
Result := LInfo.HIcon;
end;
end;
Habe das PopupMenu jetzt 100 mal geöffnet und geschlossen scheint zu funktionieren..
Na ja wer macht das schon bei normaler Bedienung.
gruss