Das Du das Icon nicht siehst liegt daran, das in GetIcon mit MyIcon.Free; (auch MyIconH) freigegeben wird.
Es scheint so, als hättest Du meinen QT nicht richtig interpretiert, denn das sind 3 Möglichkeiten, von der jede einzelne funktionieren würde.
Wenn Du nur vor hast die Icons irgendwo drauf zu malen, dann würd' ich mir einfach das IconHandle wo sichern um es mit DrawIconEx zu zeichnen.
Somit kann man auch ganz lässig die Hintergrundfarbe ändern
Delphi-Quellcode:
...
private
{ Private-Deklarationen }
Icons:Array[0..255] of HIcon;
public
{ Public-Deklarationen }
procedure FreeIcons;
procedure LoadIcons;
...
procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
Color:=Random(16777216);
LoadIcons;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FreeIcons;
end;
procedure TForm1.FormPaint(Sender: TObject);
var i:Byte;
begin
// Icons zeichnen
For i:=0 to High(Icons) do
if Icons[i]>1 then
DrawIconEx(Canvas.Handle, 10+(i * 32), 10, Icons[i], 32, 32, 0, Brush.Handle, DI_NORMAL);
end;
procedure TForm1.FormClick(Sender: TObject);
begin
Color:=Random(16777216);
end;
procedure TForm1.FreeIcons;
var i:Byte;
begin
// Icons freigeben
For i:=0 to High(Icons) do
if Icons[i]>1 then
DeleteObject(Icons[i]);
ZeroMemory(@Icons, SizeOf(Icons));
end;
procedure TForm1.LoadIcons;
var i:Byte;
begin
FreeIcons;
// Icons laden
For i:=0 to High(Icons) do begin
Icons[i]:=ExtractIcon(0, '%WinDir%\Explorer.exe', i);
If Icons[i]<=1 then Break;
end;
end;