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

ben*_*ben 4 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
    showmessage('not loaded');
Run Code Online (Sandbox Code Playgroud)

两种方式都行不通。有任何想法吗?谢谢!

Rob*_*edy 5

ResourceLoadGetResource方法加载整个从单个指定图像资源的图像列表。目的是您将拥有一个位图,其中包含要进入列表的所有图像。然后,控件根据图像列表配置的宽度和高度将其切成单独的图块。

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

看起来您无论如何都不想加载整个图像列表。您似乎希望将图标附加到列表中已有的图像列表中。在这种情况下,您的方法调用LoadImage很好。TIcon知道如何从资源本身加载东西,所以你的代码可以更精简一些:

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