首页 > 解决方案 > 设计器中的资源正常,模块中未发现运行时异常

问题描述

我正在尝试将一些图像添加到我的新组件中。所以我做了这个

项目 -> 资源和图像

添加了一个新的资源文件名:Logo.png 类型:RCDATA 标识符:LOGO

在构造函数上,我这样做:

  OptionsImage.Glyph.LoadFromResource(HInstance,'Logo',RT_RCDATA);
  OptionsImage.Glyph.SourceHeight:=24;
  OptionsImage.Glyph.SourceWidth:=24;

在 Designer 中,这完美无缺。但是如果我尝试运行它......我会收到错误消息:

在 00074128 的模块 Project1.exe 中出现异常 EResNotFound。找不到资源 LOGO。

为什么在运行时找不到徽标?

谢谢你的帮助。

更新 1:

我在上面有一个 GridButton.bpl

{$R *.res}
{$R *.dres}

仅此一项,设计器就可以正常工作,但是如果我尝试运行,则会出现错误。

现在如果我添加到 Unit : cxGridButton.pas 相同的行

{$R *.res}
{$R *.dres}

我收到警告说我有重复的资源。但现在它可以在设计时和运行时工作。

我一定是做错了什么。但是什么?

更新 2

另一个问题是相同的,但是答案不起作用。

同时我解决了它,但我不明白为什么它现在可以工作。

GridButton.bpl

包网格按钮;

{$R *.res}
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS OFF}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION ON}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO OFF}
{$SAFEDIVIDE OFF}
{$STACKFRAMES OFF}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DEFINE RELEASE}
{$ENDIF IMPLICITBUILDING}
{$IMPLICITBUILD ON}

requires
 *******;

contains
  cxGridButton in 'cxGridButton.pas';

end.

并且单位本身有

implementation

{$R GridButton.dres}

现在它在 Designtime 和 Runtime 工作。资源管理器中是否有错误或我做错了什么?有人可以解释一下。

标签: delphicomponents

解决方案


通过Project -> Resource 和 Images添加的资源被编译成单独的资源文件名.dres。该资源文件必须在DPR中提及。通常 IDE 会负责添加此文件,但在您的情况下可能会以某种方式丢失。

当您在 IDE 之外进行编译时,事情会稍微复杂一些——比如在构建服务器上。在这种情况下,您必须自己负责创建DRES文件。


推荐阅读