我有一个组件。在组件中,我需要加载动态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;
如何创建单个资源文件,例如,可以将多个图像加载到组件中,而无需在每个项目中添加资源。你有办法吗?
答案 0 :(得分:4)
您必须将它添加到您想要使用它的每个项目中,但有一些方法可以使任务更容易。
使用.res
文件和.rc
工具创建brcc
文件:
brcc32 -fo output.res input.rc
将相同的.res
文件添加到您要使用这些图片的每个项目中(项目>>添加到项目或只需修改.dpr
即可添加{R 'path/filename.res'}
。你有一个共同的单元来处理所有这些项目(如果你谈到的那个组件是自定义组件的情况就是这种情况),你也可以将.res
文件添加到该单元,并将资源加载到所有这些组件中
.res
和.rc
({$R 'output.res' 'input.rc'}
)的资源,Delphi将自动为您编译资源文件(我无法确定它何时决定这样做,但如果你多次编译你的项目,那么资源文件肯定会被编译。)示例.rc
文件:
IMAGE_1 BITMAP Path\Image1.bmp
第二个参数是Resource-Definition Statement。
当然,如果这些图片中的任何一个发生变化,您将不得不手动重新编译.rc
文件。