Как извлечь иконку из EXE или DLL?

Материал из DRKB

Как извлечь иконку из EXE или DLL?[править | править код]

Такой вот совет пришел ко мне с рассылкой "Ежедневная рассылка сайта Мастера DELPHI", думаю многим будет интересно.

Решить эту задачу нам поможет функция

function ExtractIcon(hInstance, filename, iconindex): Integer
  • hinstance - глобальная переменная приложения, ее изменять не надо. Тип integer.
  • filename - имя программы или DLL из которой надо извлекать иконки. Тип pchar.
  • iconindex - порядковый номер иконки в файле (начинается с 0). В одном файле может находится несколько иконок. Тип integer.

Функция находится в модуле ShellApi, так что не забудьте подключить его в uses. Если эта функция возвратит ноль, значит иконок в файле нет.

Данная функция возвращает handle иконки, поэтому применять ее нужно так:

Image1.Picture.Icon.Handle := ExtractIcon(hInstance, PChar(ParamStr(0)), 0);

данное объявление нарисует в Image'e картинку вашего приложения.


Author: Михаил Христосенко
Source: Взято с Vingrad.ru http://forum.vingrad.ru
ID: 02154



Функция ExtractIcon позволяет извлечь иконку из exe, dll и ico-файлов. Если указанная иконка отсутствует, функция возвращает 0. Количество иконок, содержащихся в файле, можно узнать, указав в качестве последнего параметра -1.

uses ShellAPI;

procedure TForm1.Button1Click(Sender: TObject);
var
  ic: TIcon;
  i, count: Integer;
  w: Integer;
begin
  if not OpenDialog1.Execute then Exit;
  Form1.Canvas.FillRect(Form1.Canvas.ClipRect);
  count := ExtractIcon(Application.Handle, PChar(OpenDialog1.FileName), -1);
  ic := TIcon.Create;
  w := Form1.Width div 32;
  for i := 0 to count - 1 do
  begin
    ic.Handle := ExtractIcon(Application.Handle, PChar(OpenDialog1.FileName), i);
    Form1.Canvas.Draw(32 * (i mod w), 32 * (i div w), ic);
  end;
  ic.Destroy;
end;


Автор советов: Даниил Карапетян
e-mail: delphi4all@narod.ru

Автор справки: Алексей Денисов
e-mail: aleksey@sch103.krasnoyarsk.su


Author: Алексей Денисов
ID: 02155