Как загрузить один значок из ресурсов другого файла с помощью 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 до настройки ручки.