delphi - 设计器中的资源正常,模块中未发现运行时异常
问题描述
我正在尝试将一些图像添加到我的新组件中。所以我做了这个
项目 -> 资源和图像
添加了一个新的资源文件名: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 工作。资源管理器中是否有错误或我做错了什么?有人可以解释一下。
解决方案
通过Project -> Resource 和 Images添加的资源被编译成单独的资源文件名.dres。该资源文件必须在DPR中提及。通常 IDE 会负责添加此文件,但在您的情况下可能会以某种方式丢失。
当您在 IDE 之外进行编译时,事情会稍微复杂一些——比如在构建服务器上。在这种情况下,您必须自己负责创建DRES文件。
推荐阅读
- go - 我将如何优化在执行 Hash 时读取的代码并从头开始重新读取它?
- javascript - React Redux Firebase:firebase.auth(...).signOut(...).then(...).error 不是函数
- sql - 在带有 UNION 子句的 postgres 中使用 ORDER BY 的问题
- flutter - 使用 Flutter 安装 `flutter_twitter_login` 和 `TwitterKit` 时出现问题
- highcharts - 如何让我的最后一点在 highstock 中闪烁?
- matlab - MATLAB中的嵌套for循环错误或索引错误
- javascript - 如何将 onChange 事件添加到元素列表中,这将使用当前值更新 HTML?
- oracle - 在 docker 容器中安装 oracle 客户端
- c# - C# WPF 菜单未在标题中显示第一个“_”
- java - 鼠标点击后无法绘制塔