我想加载一个图标(来自另一个文件),其中没有嵌入多个图标(它不是图标组)。 我不知道它的大小。 我现在使用此代码来检索图标的句柄并将其与TIcon.Handle一起使用:
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,
$00030000);
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旨在以相同的分辨率获取它们,这就是我正在寻找另一个功能的原因。 谢谢你的帮助。
答案 0 :(得分:11)
使用CreateIconFromResourceEx
代替CreateIconFromResource
。
CreateIconFromResourceEx
可让您提供所需的宽度/高度,而CreateIconFromResource
则使用默认的系统mertics(例如LR_DEFAULTSIZE
解释):
使用系统指标值指定的宽度或高度 如果cxDesired或cyDesired值设置为,则为游标或图标 零。如果未指定此标志且cxDesired和cyDesired是 设置为零,该函数使用实际的资源大小。如果 资源包含多个图像,该函数使用的大小 第一张图片。
答案 1 :(得分:0)
Roman R.可能是对的,但我还补充说,在设置其句柄之前,必须设置TIcon对象的正确尺寸。