如何在Delphi组件中存储大文本?

5
我制作了一个自定义组件,需要一个相当大(比如1MB)的UTF8文本才能正常运行。为了开发方便,我只是从文件中加载了这个文本。现在我想摆脱这个文件。有什么最简单的方法可以将其内容存储在组件中,使得组件的用户不必担心这个问题?
首先,我尝试将其作为字符串常量,但很快Delphi就开始以许多不同的方式抱怨(太长或太多,内存不足等)。当我切换到将其嵌入为资源时,我发现该资源不会自动编译到实际应用程序中,因此对于组件用户来说并不透明...
更新
如果我自己创建一个资源文件,然后手动将其添加到单元中,那么它就能正常工作。然后,我仍然需要一个预构建事件才能使其实际上可用。问题仍然是,为什么如果我通过Delphi菜单将其添加到包中而不是单元中,它就无法工作?为什么{$R myresource.res myresource.rc}不能像应该的那样自动编译它...?
更新2
显然,资源脚本需要添加到项目中才能使自动编译生效。

你是如何将它添加为资源的?这样做应该可以正常工作,并被放入应用程序的资源表中(假设在构建应用程序时可以找到该资源)。 - Ken White
2
@KenWhite 刚刚进入了 ProjectResources... 并将文件添加到组件项目中。https://dev59.com/smHVa4cB1Zd3GeqPqtex 让我相信这种方式永远不会起作用,除非还对应用程序项目进行一些操作。 - Thijs van Dien
1个回答

8

在包含该组件的单元中添加{$R myresource.res}行应该有效。

您可以将myresource.rc文件添加到组件的包中,以便Delphi自动生成myresource.res


我按照上面评论中的描述,通过菜单将文件添加到组件项目中。在 dpk 文件中,我有 {$R *.res}。如果我也在单元中添加 {$R <project-name>.res},则会收到关于重复资源的警告,并且仍然无法正常工作。相反,如果我自己创建另一个 rc 文件,则不会自动编译为 res - Thijs van Dien
{$R MyText.res MyText.rc} 也无法解决这个问题,错误仍然存在。 - Thijs van Dien
3
停止试图将该资源与“项目”联系起来。它不是项目的一部分,而是你的组件的一部分。如果你使用适当的资源脚本将其作为资源包含在你的组件中,就不需要预先构建事件或任何其他内容。每当你的单元在项目中被使用时,它都会自动编译和链接。 - Ken White
@KenWhite 我应该如何理解“正确包含(include properly)”? 除了创建rc并将该行添加到单元中以使其自动编译外,我还需要做什么? - Thijs van Dien
1
@KenWhite 已经搞定了,已将其添加到项目中,现在一切正常。 - Thijs van Dien
1
如果您加上了需要将 MyText.rc 添加到项目中这一事实,那么您的答案是可以接受的。 - Thijs van Dien

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接