2010-11-29 36 views
3

soit i privé entierdelphi 7 TImage et TImageList

le code

procedure TForm1.Image1Click(Sender: TObject); 
begin 
    inc(i); 
    ImageList1.GetIcon(i mod 4,Image1.Picture.Icon); 
end; 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    i:=0; 
    ImageList1.GetIcon(i mod 4,Image1.Picture.Icon); 
end; 

comment puis-je l'étirer icône dans la liste à la taille de Image1?

Répondre

5
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; 
+0

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

+0

@none: Supprimer ces lignes rendra le code inopérant ... Au moins dans Delphi 2009. Peut-être que 'GetIcon' fonctionne différemment dans Delphi 7. –

+0

De toute façon, passons la VCL et faisons les choses nativement! Voir mon code mis à jour. –