Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Aus Hicon mache TIcon...


webmaker - Do 10.07.03 10:44
Titel: Aus Hicon mache TIcon...
Hi ich habe ein Handle zu einem Icon (HIcon) mit der folgenden Funktion:

Quelltext
1:
2:
3:
4:
5:
6:
7:
function GetIcon(Handle : Cardinal) : HIcon;
var
  H: HIcon;
begin
  H := CopyIcon(GetClassLong(handle, GCL_HICON ));
  result := h;
end;

Jetzt möchte ich das Icon auch zu einer ImageList hinzufügen. Doch damit habe ich so meine Probleme...
Wollte das eigentlich so machen:

Quelltext
1:
2:
Icon.Handle := GetIcon(StrToInt(fenster[i, 0]));
ImageList1.AddIcon(Icon);

Wobei Icon natürlich vom Typ TIcon ist.
Irgendwie scheint es da aber Probleme zu geben (Es kommt ne Zugriffsverletzung)
Wie mache ich das jetzt richtig?


Tana´Ri - Do 10.07.03 11:59

so funktioniert es:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TFrm_IconChange.Button1Click(Sender: TObject);
var Icon    : TIcon;
    FileInf : TShFileInfo;
 begin
  Icon := TIcon.Create;
  try
   ShGetFileInfo(PChar(ParamStr(0)),0,FileInf,SizeOf(TShFileInfo),SHGFI_ICON);
   Icon.Handle := CopyIcon(FileInf.hIcon);
   if icon.Handle <> 0 then // zur Visualisierung
   begin 
    Imagelist1.AddIcon(Icon);
    imagelist1.GetIcon(0,imgico.Picture.Icon);
   end;
  finally
   Icon.free;
  end;
end;


webmaker - Do 10.07.03 12:17

ach jetzt weiß ich was ich falsch gemacht habe...JEtzt wo ich deinen Code sehe, fällt es mir wie schuppen von den Augen...
Ich habe vergessen das TIcon zu createn....da kommt dann natürlich eine Fehlermeldung...
Danke trotzdem.
PS: Was macht dein Code eigentlich ncoh anders?


Tana´Ri - Do 10.07.03 12:34

Mit GetClassLong must du das Application.Handle verwenden !
GetClassLong bezieht das Handle auf die entsprechenden Klasse.

-ShGetFileInfo bezieht sich direkt auf die Exe (ParamStr(0) = application.exename)

-kein Umweg über eigene GetIcon