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

Я хочу загрузить значок (из другого файла), в который не встроено несколько значков (это не группа значков). Я не знаю его размера. Я сейчас использую этот код, чтобы получить дескриптор иконки и использовать его с TIcon.Ручка:

function ResourceToIconHandle(hFile: hModule; IDname: PChar): HICON;
var
   hGicon1,
   hLoadIcon1: THandle;
   pGIcon1: Pointer;
begin
   hGicon1 := FindResource(hFile, IDName, RT_ICON);
   if hGicon1 <> 0 then
   begin
      hLoadIcon1 := LoadResource(hFile, hGicon1);
      pGicon1 := LockResource(hLoadIcon1);
      Result := CreateIconfromResource(pGicon1,
           SizeofResource(hFile, hGicon1),
           True,
           030000);
   end;
end;

Да, это только часть кода (если вы хотите, я покажу всем). Он работает только с одной проблемой: функция CreateIconfromResource дает мне любой значок, разбросанный на 32x32:

1 http://22.imagebam.com/download/u7q9PTEAUlSeZ1IJXQ5ViA/15321/153201662/bad.PNG

но я хочу получить значки в оригинальном разрешении: 2 http://56.imagebam.com/download/yH_Nc9dfsADso0W9A2bL1w/15321/153204932/good.PNG

Я знаю, что CreateIconfromResource предназначен для получения их с тем же разрешением, поэтому я ищу другую функцию. Спасибо за помощь.

2 ответов


использовать CreateIconFromResourceEx вместо CreateIconFromResource.

CreateIconFromResourceEx позволяет обеспечить нужную ширину/высоту, в то время как CreateIconFromResource использует системные mertics по умолчанию для тех (например, объясняется для LR_DEFAULTSIZE):

использует ширину или высоту, заданные значениями метрики системы для курсоры или значки, если для cxdesired или cyDesired задано значение нуль. Если этот флаг не указан и cxDesired и cyDesired значение равно нулю, функция использует фактический размер ресурса. Если этот ресурс содержит несколько изображений, функция использует размер первое изображение.


Роман Р., вероятно, прав, но я также добавляю, что вы должны установить правильные размеры объекта TIcon до настройки ручки.