【问题标题】:Delphi Imagelist: Load icons with ResourceLoad from a .resDelphi Imagelist:使用 ResourceLoad 从 .res 加载图标
【发布时间】:2011-03-04 15:38:29
【问题描述】:

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

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

【问题讨论】:

标签: delphi


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • Rob 的回答是一个更好的方法。您的代码根本没有进行任何错误检查,也没有释放您创建的图标。
    猜你喜欢
    • 2012-07-20
    • 1970-01-01
    • 2017-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多