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