在更多项目上加载资源(图像)

时间:2016-06-15 11:53:17

标签: delphi resources components timagelist

我有一个组件。在组件中,我需要加载动态TImageList。

这种方式我今天使用,但在我的所有项目中,我需要一次添加所有图像。

function NavigatorImages: TImageList;
var
   vIcon: TBitmap;
   I: Integer;
begin
   if FNavigatorImages = nil then
   begin
      vIcon := TBitmap.Create;
      try
         FNavigatorImages := TImageList.Create (nil);
         FNavigatorImages.Height := 16;
         FNavigatorImages.Width := 16;
         for I := 0 to 11 do
         begin
            vIcon.LoadFromResourceName (HInstance, 'IMAGE_' + IntToStr(I));
            FNavigatorImages.AddMasked (vIcon, vIcon.Canvas.Pixels[0,        FNavigatorImages.Height - 1]);
         end;
      finally
         vIcon.Free;
      end;
   end;
   Result := FNavigatorImages;
end;

如何创建单个资源文件,例如,可以将多个图像加载到组件中,而无需在每个项目中添加资源。你有办法吗?

1 个答案:

答案 0 :(得分:4)

您必须将它添加到您想要使用它的每个项目中,但有一些方法可以使任务更容易。

  1. 使用.res文件和.rc工具创建brcc文件:

    brcc32 -fo output.res input.rc
    
  2. 将相同的.res文件添加到您要使用这些图片的每个项目中(项目>>添加到项目或只需修改.dpr即可添加{R 'path/filename.res'}。你有一个共同的单元来处理所有这些项目(如果你谈到的那个组件是自定义组件的情况就是这种情况),你也可以将.res文件添加到该单元,并将资源加载到所有这些组件中

  3. 还值得注意的是,如果您添加指定.res.rc{$R 'output.res' 'input.rc'})的资源,Delphi将自动为您编译资源文件(我无法确定它何时决定这样做,但如果你多次编译你的项目,那么资源文件肯定会被编译。)
  4. 示例.rc文件:

    IMAGE_1 BITMAP Path\Image1.bmp
    

    第二个参数是Resource-Definition Statement

    当然,如果这些图片中的任何一个发生变化,您将不得不手动重新编译.rc文件。