Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.05.06;
Скачать: CL | DM;

Вниз

Иконки в файлах   Найти похожие ветки 

 
deswan ©   (2007-04-15 22:47) [0]

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


 
MBo ©   (2007-04-16 05:57) [1]

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


 
Novice   (2007-04-16 07:30) [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;


(С) DelphiWorld


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


> deswan ©   (15.04.07 22:47)


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


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


 
clickmaker ©   (2007-04-17 11:07) [4]


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

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



Страницы: 1 вся ветка

Текущий архив: 2007.05.06;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.013 c
2-1176830256
Игрок
2007-04-17 21:17
2007.05.06
Color(16)


1-1170623927
Blacksus
2007-02-05 00:18
2007.05.06
ловушка и форма


15-1176096050
novik
2007-04-09 09:20
2007.05.06
нужны уроки программирования


15-1175969605
cyborg
2007-04-07 22:13
2007.05.06
Однако!


15-1176014335
stunia
2007-04-08 10:38
2007.05.06
работа с Excel