Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Иконки в файлах [WinXP]


deswan ©   (2007-04-15 22:47:00) 

Как вытащить иконку из файла знают многие, а как определить их количество - никто


clickmaker   (2007-04-17 11:07:00) [1]


> как определить их количество - никто

меньше знаешь - крепче спишь


Сергей М.   (2007-04-17 10:58:00) [2]


> deswan ©   (15.04.07 22:47)


> как определить их количество - никто


Что ж в том удивительного ?


Novice   (2007-04-16 07:30:00) [3]

Сначала в разделе 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;


(С) DelphiWorld


MBo   (2007-04-16 05:57:00) [4]

Журнал "Вопросы философии"  - более подходящее место для подобных екзерсисов.


Наверх

Титульная страница Поиск, карта сайта Написать письмо