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

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

Большие иконки [D7, XP]


ttt ©   (2013-03-03 21:08:00) 

Добрый вечер.

Необходимо извлечь из dll или exe иконку по индексу максимального размера либо 48х48.
Пытался рыть в сторону ExtractIconEx и SHGetFileInfo, но первый возвращает максимум 32х32, а второй иконку приложения.
Возможно ли это стандартными методами или придется шурудить в ресурсах?


ttt   (2013-03-04 13:06:00) [1]

function PrivateExtractIcons(lpszFile: PChar; nIconIndex,
cxIcon, cyIcon: integer; phicon: PHANDLE; piconid: PDWORD;
nicon, flags: DWORD): DWORD; stdcall; external user32 name 'PrivateExtractIconsA';


Вот оно!


sniknik   (2013-03-04 10:32:00) [2]

http://rmklever.com/?p=266


sniknik   (2013-03-04 08:20:00) [3]

> SHGFI_SYSICONINDEX or SHGFI_ICON or SHGFI_LARGEICON
попробуй оставить только нужное.


ttt   (2013-03-03 23:22:00) [4]

var
 IconIndex: integer;
 icon: TIcon;
 h1, h2: array [0..$FF] of HICON;
 FI: SHFILEINFO;
 ImageList: HIMAGELIST;
begin
try
 IconIndex:= StrToInt(edtIconIndex.Text);
except
 IconIndex:= -1;
end;

icon:= TIcon.Create;
if IconIndex = -1 then begin
 SHGetFileInfo(PChar(IconFile), 0, FI, SizeOf(FI), SHGFI_SYSICONINDEX or SHGFI_ICON or SHGFI_LARGEICON);
 ImageList:= GetImageListSH(2);
 icon.Handle:= ImageList_GetIcon(ImageList, FI.iIcon, ILD_NORMAL);
 ImageList_Destroy(ImageList);
end else begin
 ExtractIconEx(PChar(IconFile), IconIndex, h1[0], h2[0], 200);
 icon.Handle:= h1[0];
end;

Image1.Canvas.Draw(0, 0, icon);


Так вот. Когда использую SHGetFileInfo то получаю иконку 48х48, но она не работает с индексом.
Далее тестировал содержимое массива. Иконок всего 96 штук в файле. Массив забит только на 96 элементов и все 32х32.


Rouse_   (2013-03-03 22:38:00) [5]

Покажи код.


ttt   (2013-03-03 22:10:00) [6]

Ну да, это и есть массив 32х32 иконок.


Rouse_   (2013-03-03 21:14:00) [7]

ExtractIconEx

phiconLarge [out, optional]
Type: HICON*
An array of icon handlesthat receives handles to the large icons extracted from the file. If this parameter is NULL, no large icons are extracted from the file.


Наверх

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