Delphi 7 TImage и TImageList - PullRequest
       29

Delphi 7 TImage и TImageList

3 голосов
/ 29 ноября 2010

позвольте мне быть целым числом

код

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?

1 Ответ

5 голосов
/ 29 ноября 2010
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, поскольку степень сотрудничества между VCL и собственным API Windows несколько неясна.Если приведенный выше код не работает (я чувствую, что это утечка значков), вот чистый нативный подход (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;
...