如何正确地将资源(* .res)文件添加到包中?

时间:2011-07-26 13:50:53

标签: image delphi resources components

我在单个.dpk文件中设置了自己的Delphi组件。我的一个组件需要一些图像随其一起分发。我创建了RES文件(让它成为“MyImages.RES”),我希望我的可视组件在创建时加载其内容。

如何正确地将此RES文件添加到DPK?

当我将{$ R'MyImages.RES'}放入我的.dpk文件时,TResourceStream在创建时失败,因为它无法按资源名称找到我的图片:

constructor TMyComponent.Create(AOwner: TComponent);
begin
  S := TResourceStream.Create(HInstance, 'MY_PICTURE1', RT_RCDATA);

RES文件由此RC创建:

MY_PICTURE1 RCDATA "my_picture1.png"

2 个答案:

答案 0 :(得分:7)

直接在声明组件的单元中使用{$R 'MyImages.res'}指令。加载资源时,请使用FindClassHInstance(TMyComponent)TMyComponent所在的模块)而不是HInstance(主要可执行文件 - 这可能同时也是TMyComponent所在的模块,具体取决于方式你正在联系)。

编辑:您似乎想要与运行时包链接,但实际上您将组件静态链接到主可执行文件中。显然,您已经编译了运行时(和设计时).bpl包。要编译使用带有运行时包的组件的主项目(.exe或.dll),您应该:

  1. 在“项目选项”
  2. 中选择“使用运行时包构建”
  3. 将程序包的基本名称添加到“项目选项”中的运行时程序包列表中。

答案 1 :(得分:1)

从评论到您的问题很明显,您没有在运行时正确链接到包,TMyComponent正静态链接到您的可执行文件,而不是从包中动态链接。

您可以通过以下两种方式之一解决这个问题:

  1. 修复链接问题,以便在运行时确实链接到包。这是在Project |中配置的选项| Delphi IDE中的软件包。
  2. 如果要静态链接,则需要将.res文件链接到可执行文件。 @ TOndrej的回答给出了一个简洁的方法来安排。