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;
코드를 변경하고 아이콘을 제거하는 경우 : = TIcon.create 및 line icon.free; 이 코드는 매력으로 작용하여 대답으로 표시합니다. – none
@none :이 줄을 제거하면 코드가 작동하지 않습니다. 적어도 Delphi 2009에서는. 아마도 GetIcon은 Delphi 7에서 다른 방식으로 작동합니다. –
아무리해도 VCL을 건너 뛰고 기본적으로 작업을 수행해 봅시다. 내 업데이트 된 코드를 참조하십시오. –