![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с ExtractIconEx - есть вопросы [D6, Win95/98, Win2k, WinXP]
Jel © (2004-05-22 14:52:00)Нужно получть все иконки из файла, причем как большие (32х32) так и маленькие (16х16). Пишу
type ThIconArray = array[0..0] of hIcon;
PhIconArray = ^ThIconArray;
function ExtractIconEx(lpszFile: PAnsiChar;
nIconIndex: Integer;
phiconLarge : PhIconArray;
phiconSmall: PhIconArray;
nIcons: UINT): UINT; stdcall;
external 'shell32.dll' name 'ExtractIconExA';
procedure TForm1.aScanFileExecute(Sender: TObject);
var i : integer;
NumIcons: integer;
pTheLargeIcons: phIconArray;
pTheSmallIcons: phIconArray;
begin
if OpenDialog1.Execute then begin
NumIcons := ExtractIconEx(pchar(OpenDialog1.FileName), -1, nil, nil, 0);
GetMem(pTheLargeIcons, NumIcons * sizeof(hIcon));
GetMem(pTheSmallIcons, NumIcons * sizeof(hIcon));
FillChar(pTheLargeIcons^, NumIcons * sizeof(hIcon), #0);
FillChar(pTheSmallIcons^, NumIcons * sizeof(hIcon), #0);
ExtractIconEx(pchar(OpenDialog1.FileName), 0, pTheLargeIcons, pTheSmallIcons, NumIcons);
for i := 0 to NumIcons - 1 do begin
SetLength(IconArray, Length(IconArray) + 1);
IconArray[Length(IconArray)-1] := TIcon.Create;
IconArray[Length(IconArray)-1].Handle := pTheLargeIcons^[i];
SetLength(IconArray, Length(IconArray) + 1);
IconArray[Length(IconArray)-1] := TIcon.Create;
IconArray[Length(IconArray)-1].Handle := pTheSmallIcons^[i];
ShowMessage(IntToStr(IconArray[Length(IconArray)-1].Width));
end;
FreeMem(pTheLargeIcons, NumIcons * sizeof(hIcon));
FreeMem(pTheSmallIcons, NumIcons * sizeof(hIcon));
end;
end;
в итоге получаю и большие и маленькие иконки но - изображение маленькой иконки (16х16) рисуется в левом верхнем углу квадрата 32 на 32. То есть на выходе и большие и маленькие иконки имеют одинаковый размер. Почему так? И как получить маленькие иконки правильного размера?
Jel (2004-05-24 11:10:00) [1]up. Неужели никто не пользовался?
Jel (2004-05-22 22:12:00) [2]up, однако. Вопрос остается открытым.