2010-11-29 5 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; 

은 내가 어떻게 image1에 크기에 맞게 목록에서 아이콘을 스트레칭 않는 정수 개인

코드하자?

답변

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; 

더 나은 접근 방법

때때로는 VCL 및 기본 Windows API 간의 협력의 범위 이후 델파이를 사용하는 것이 어색 조금 다소 불분명하다. 위의 코드는 (필자는이 아이콘을 유출 느낌을 얻을) 작동하지 않는 경우, 여기에 순수한 네이티브 방식 (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을 건너 뛰고 기본적으로 작업을 수행해 봅시다. 내 업데이트 된 코드를 참조하십시오. –