Delphi Imagelist:使用ResourceLoad从.res加载图标

Delphi Imagelist:使用ResourceLoad从.res加载图标,delphi,Delphi,我正在尝试将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

我正在尝试将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');

两种方法都不行。有什么想法吗?谢谢

我直接使用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;
...

ResourceLoad
GetResource
方法从单个指定的图像资源加载整个图像列表。这样做的目的是,您将拥有一个包含列表中所有图像的位图。控件然后根据图像列表配置的宽度和高度将其分割为单独的分幅

考虑到这一点,您可能希望图像列表只加载您的图标,并且只保留列表中的单个图像。但是图像列表只允许加载位图资源。他们不会加载图标资源。(资源类型参数的存在是为了保留将来扩展其功能的可能性。)有关详细信息,请参阅API函数

看起来您无论如何都不想加载整个图像列表。您似乎希望将图标附加到列表中已存在的图像列表中。在这种情况下,调用
LoadImage
的方法就可以了
TIcon
知道如何从资源本身加载内容,因此您的代码可以更加精简:

myicon := TIcon.Create;
try
  myicon.LoadFromResourceName(HInstance, 'TEXT_BOLD');
  FImageList.AddIcon(myicon);
finally
  myicon.Free;
end;

罗布的答案是更好的办法。您的代码根本没有进行任何错误检查,也没有释放您创建的图标。