2010-11-29 13 views
3

は私がデルファイ7 TImageのとTImageListの

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; 

がどのように私は、画像1のサイズに合わせて、リストからアイコンを伸ばすん整数プライベート

コードも聞かせて? VCLとネイティブのWindows API間の協力の程度がやや不明確であるため、

答えて

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; 

より良いアプローチ

は、時にはDelphiを使用して少しぎこちないです。上記のコードは(私はそれがアイコンが漏れている感覚を得る)動作しない場合は、ここでは純粋なネイティブのアプローチは、(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

あなたは、コードを変更して、アイコンを削除する場合:= TIcon.createとline icon.free;このコードは魅力として働き、それを答えとしてマークします。 – none

+0

@none:これらの行を削除すると、コードが動作しなくなります。少なくともDelphi 2009では。おそらく、 'GetIcon'はDelphi 7で別の方法で動作します。 –

+0

どうも、VCLをスキップしてネイティブに処理しましょう!私の更新されたコードを見てください。 –

関連する問題