procedure TForm1.Image1Click(Sender: TObject);
var
icon: TIcon;
begin
inc(i);
Image1.Canvas.FillRect(ClientRect);
icon := TIcon.Create;
try
ImageList1.GetIcon(i mod 4, icon);
DrawIconEx(Image1.Canvas.Handle, 0, 0, icon.Handle, Image1.Width, Image1.Height, 0, 0, DI_NORMAL);
finally
icon.Free;
end
end;
Une meilleure approche
Parfois, il est un peu difficile à utiliser Delphi depuis l'étendue de la coopération entre la VCL et l'API Windows native est peu claire. Si le code ci-dessus ne fonctionne pas (je suis le sentiment qu'il est icônes fuite), voici une approche purement native (uses ImgList, CommCtrl
):
procedure TForm1.Image1Click(Sender: TObject);
var
icon: HICON;
begin
inc(i);
Image1.Canvas.FillRect(ClientRect);
icon := ImageList_GetIcon(ImageList1.Handle, i mod 4, ILD_NORMAL);
try
DrawIconEx(Image1.Canvas.Handle, 0, 0, icon, Image1.Width, Image1.Height, 0, 0, DI_NORMAL);
finally
DestroyIcon(icon);
end
end;
si vous modifiez le code et de supprimer l'icône: = TIcon.create et la ligne icon.free; ce code fonctionne comme charme et malade marque comme la réponse. – none
@none: Supprimer ces lignes rendra le code inopérant ... Au moins dans Delphi 2009. Peut-être que 'GetIcon' fonctionne différemment dans Delphi 7. –
De toute façon, passons la VCL et faisons les choses nativement! Voir mon code mis à jour. –