1

我有一个组件。在组件中,我需要加载动态的 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;

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

4

1 回答 1

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 将自动为您编译资源文件(我无法确定它何时决定这样做,但如果您编译您的项目几个次,资源文件肯定也会被编译)。

示例.rc文件:

IMAGE_1 BITMAP Path\Image1.bmp

第二个参数是资源定义语句

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

于 2016-06-15T12:12:53.757 回答