Hi,
das Ergebnis sieht gut aus, aber ich verstehe nicht, was ich mit dem Ergebnis Icon.Images.Image anfangen soll. Das ist nämlich TIconImage und lässt sich nicht via Canvas zeichnen.
Habe mich nochmal genauer damit beschäftigt:
Delphi-Quellcode:
procedure GetIcon(filename : String; IconIndex: Integer; var Result : TBitmap);
var NumberOfIcons : Integer;
Ico : TIcon;
Icon : TAdvancedIcon;
IconLib : TIconLibrary;
Image : TIconImage;
begin
NumberOfIcons := ExtractIcon(hInstance, PChar(Filename), UINT(-1));
Ico := TIcon.Create;
if (Ico <> nil) and (NumberOfIcons > -1) then
Ico.Handle := ExtractIcon(hInstance, PChar(Filename), IconIndex);
Icon := TAdvancedIcon(Ico);
IconLib := TIconLibrary.Create;
Image := Icon.Images.Image[1];
Result := TBitmap.Create;
Image.Draw(Result.Canvas, 0, 0);
Ico.Free;
Icon.Free;
IconLib.Free;
end;
Nun gibt es eine
AV in der markierten Zeile der AdvancedIcon.pas:
Delphi-Quellcode:
function TIconImageList.GetIconImage(Index : Word) : TIconImage;
begin
Result:=nil;
IF Index>FCapacity Then exit; <--
Result:=FList^[Index];
end;
Ich gehe davon aus, dass oben TAdvancedIcon(Ico) falsch ist, was müsste anstelle davon hin ? So habe ich es zumindest im Beispielcode gesehen.