Delphi World - Получение иконки из ICO, EXE, DLL 2
Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Получение иконки из ICO, EXE, DLL 2

Сначала в разделе interface пишем такой код:


type ThIconArray = array[0..0] of hIcon;
type PhIconArray = ^ThIconArray;

function ExtractIconExA(lpszFile: PAnsiChar;
  nIconIndex: Integer;
  phiconLarge : PhIconArray;
  phiconSmall: PhIconArray;
  nIcons: UINT): UINT; stdcall;
  external 'shell32.dll' name 'ExtractIconExA';

function ExtractIconExW(lpszFile: PWideChar;
  nIconIndex: Integer;
  phiconLarge: PhIconArray;
  phiconSmall: PhIconArray;
  nIcons: UINT): UINT; stdcall;
  external 'shell32.dll' name 'ExtractIconExW';

function ExtractIconEx(lpszFile: PAnsiChar;
  nIconIndex: Integer;
  phiconLarge : PhIconArray;
  phiconSmall: PhIconArray;
  nIcons: UINT): UINT; stdcall;
  external 'shell32.dll' name 'ExtractIconExA';

Затем по нажатию на кнопку:


procedure TForm1.Button1Click(Sender: TObject);
var
  NumIcons: integer;
  pTheLargeIcons: phIconArray;
  pTheSmallIcons: phIconArray;
  LargeIconWidth: integer;
  SmallIconWidth: integer;
  SmallIconHeight: integer;
  i: integer;
  TheIcon: TIcon;
  TheBitmap: TBitmap;
begin
  NumIcons :=
  ExtractIconEx('C:\Program Files\Borland\Delphi 3\BIN\delphi32.exe',
    -1, nil, nil, 0);
  if NumIcons > 0 then
  begin
    LargeIconWidth := GetSystemMetrics(SM_CXICON);
    SmallIconWidth := GetSystemMetrics(SM_CXSMICON);
    SmallIconHeight := GetSystemMetrics(SM_CYSMICON);
    GetMem(pTheLargeIcons, NumIcons * sizeof(hIcon));
    GetMem(pTheSmallIcons, NumIcons * sizeof(hIcon));
    FillChar(pTheLargeIcons^, NumIcons * sizeof(hIcon), #0);
    FillChar(pTheSmallIcons^, NumIcons * sizeof(hIcon), #0);
    ExtractIconEx('C:\Program Files\Borland\Delphi 3\BIN\delphi32.exe',
      0, pTheLargeIcons, pTheSmallIcons, numIcons);
    {$IFOPT R+}
    {$DEFINE CKRANGE}
    {$R-}
    {$ENDIF}
    for i := 0 to (NumIcons - 1) do
    begin
      DrawIcon(Form1.Canvas.Handle, i * LargeIconWidth, 0, pTheLargeIcons^[i]);
      TheIcon := TIcon. Create;
      TheBitmap := TBitmap.Create;
      TheIcon.Handle := pTheSmallIcons^[i];
      TheBitmap.Width := TheIcon.Width;
      TheBitmap.Height := TheIcon.Height;
      TheBitmap.Canvas.Draw(0, 0, TheIcon);
      TheIcon.Free;
      Form1.Canvas.StretchDraw(Rect(i * SmallIconWidth,
        100, (i + 1) * SmallIconWidth, 100 + SmallIconHeight), TheBitmap);
      TheBitmap.Free;
    end;
    {$IFDEF CKRANGE}
    {$UNDEF CKRANGE}
    {$R+}
    {$ENDIF}
    FreeMem(pTheLargeIcons, NumIcons * sizeof(hIcon));
    FreeMem(pTheSmallIcons, NumIcons * sizeof(hIcon));
  end;
end;

Проект Delphi World © Выпуск 2002 - 2017
Автор проекта: Эксклюзивные курсы программирования