Главная страница
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.026 c
2-1176288154
>>DEATH<<
2007-04-11 14:42
2007.05.06
Посоветуйте!!!!!!!!!!!


15-1174447857
KSergey
2007-03-21 06:30
2007.05.06
Я не понимаю что такое пиратский софт


2-1176890873
bagos
2007-04-18 14:07
2007.05.06
StringGrid,ValueListEditor


1-1173602376
Makhanev Alexander
2007-03-11 11:39
2007.05.06
Диалог выбора пользователя....


2-1176820044
ppcumax
2007-04-17 18:27
2007.05.06
Необходимо одно свойство