如何在 FMX 组件中加载资源

Posted

技术标签:

【中文标题】如何在 FMX 组件中加载资源【英文标题】:How to load resources in a FMX-component 【发布时间】:2015-07-10 00:45:00 【问题描述】:

我尝试在 FMX 组件中使用资源,并在尝试读取资源时收到 EResNotFound-Error。

以下场景:

一个 FMX-bpl (FmxComponents.bpl) 我在我的 IDE (XE7) 中通过“资源和图像”添加了一些 png 文件。 资源在“FmxComponents.dres”中,但不在“FmxComponents.res”中。 当我尝试执行此语句 TResourceStream.Create(FindClassHInstance(TPmFmxTitelbar), 'ImgOptions', RT_RCDATA); 时,我收到错误 EResNotFound 'resource ImgOptions not found' 我尝试通过 haole (how-to-add-and-use-a-resource-from-a-custom-package-component-in-delphi) 的帖子解决此问题,但没有成功。

【问题讨论】:

你为什么使用FindClassHInstance?不是要把TResourceStream.Create调用放到资源链接的模块里,传HInstance吗? 谢谢,很好的提示。我以为 HInstance 给了我来自 mainUnit 的句柄。 是的,这是我的一个误会。对包裹没有好处。 【参考方案1】:

好的,我解决了这个问题。 我使用$R FmxComponents.dres 将“FmxComponents.dres”添加到我的组件中。

我认为在 dpk 文件中添加这个就足够了。

【讨论】:

【参考方案2】:

TResourceStream 构造函数的第一个参数是要搜索资源的模块的实例。因此,如果您确实使用正确的类型和名称正确链接了资源,那么人们会认为您传递了错误的模块实例。

因此,可能实现拼写错误的TPmFmxTitelbar 的模块不是资源链接到的模块。

如果您确实传递了正确的模块实例,那么剩下的结论是您无法链接具有指定类型和名称的资源。使用资源查看器/编辑器进行检查。

【讨论】:

以上是关于如何在 FMX 组件中加载资源的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flux 中加载初始数据,但前提是组件需要它

如何在反应组件中加载脚本

如何在 joomla 2.5 的组件中加载模块

如何在js文件中加载vue组件

如何从打包在war文件中的jar文件中加载资源? [复制]

如何在 Ant 任务中加载文件列表作为资源?