我正在尝试将res文件中的图标加载到图像列表中。 我用Delphi ImageEditor创建了res文件。
这样我就试图加载图标:
//if ImageList1.ResourceLoad(rtIcon, 'TEXT_BOLD', clWhite) then
if imagelist1.GetResource(rtIcon, 'TEXT_BOLD', 0, [lrDefaultColor], clRed) then
showmessage('loaded')
else
showmessage('not loaded');
两种方式都不起作用。有任何想法吗?谢谢!
答案 0 :(得分:4)
ResourceLoad
和GetResource
方法从单个指定的图像资源加载整个图像列表。目的是您将有一个位图,其中包含 all 要包含在列表中的图像。然后,控件根据图像列表的配置宽度和高度将其切片为单独的图块。
考虑到这一点,您可能希望图像列表只是加载您的图标,而只留下列表中的单个图像。但图像列表仅允许加载位图资源。他们不会加载图标资源。 (资源类型参数可以保留未来扩展其功能的可能性。)有关详细信息,请参阅ImageList_LoadImage
API函数。
看起来你不想加载整个图像列表。您似乎希望将图标附加到列表中已有的图像列表中。在这种情况下,调用LoadImage
的方法很好。 TIcon
知道如何从资源本身加载内容,因此您的代码可以更加简化:
myicon := TIcon.Create;
try
myicon.LoadFromResourceName(HInstance, 'TEXT_BOLD');
FImageList.AddIcon(myicon);
finally
myicon.Free;
end;
答案 1 :(得分:1)
我直接使用windows函数解决了这个问题:
...
var
myicon : Ticon;
Hd: THandle;
begin
Hd := LoadImage(HInstance, 'TEXT_BOLD', IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR);
myicon := TIcon.Create;
myicon.ReleaseHandle;
myicon.Handle := Hd;
FImageList.AddIcon(myicon);
end;
...