如何将TXT文件作为资源添加到我的EXE文件中?

22

我有一个包含大约10000行文本的TXT文件。我想在TMemo中显示这些行。但我不想将TXT文件分发给我的程序。如何将其作为资源集成到我的EXE文件中,而不使用stringtable {},因为它需要每行一个标识符(所以我必须添加10000个标识符)。

_

我使用的是Delphi XE。


字符串表可以容纳整个文本。 - OnTheFly
@user539... 请提供一个示例。 - Gabriel
2个回答

41

我通常会为这种资源创建一个RC文件(基本上是一个文本文件),然后添加类似以下的行:

MyText RCDATA ..\resources\filename.txt

对于每个文件/资源,需要将其加入到RC文件中。如果RC文件是项目的一部分,则会被编译(到res)并链接到exe。我通常使用TResourceStream来使用资源。

var ResStream: TResourceStream;
ResStream := TResourceStream.Create(hInstance, 'MyText', RT_RCDATA);

顺便说一下,如果在IDE中创建RC文件时自动未将其添加到项目中,则可以添加如下行:

{$R 'myExtraRes.res' 'myExtraRes.RC'}

将其加入到项目文件中,在uses列表之后。


4
请注意,现代 Delphi 版本的集成开发环境中已经有了资源管理器,因此您不再需要像以前那样频繁地使用 .rc 文件。 - Remy Lebeau
1
你能提供一个不需要使用.rc文件的解决方案吗? - Toby Allen
看看Remy的回答,那是一种方法。还有一些专门设计用于此工作的组件,它们将数据保存到DFM中...但使用RC文件有什么问题呢? - ain
如果您不想使用IDE的资源管理器,上述步骤仍然非常有效。但是您必须将.rc文件添加到Delphi项目中(如在项目 > 添加到项目中,或者在更新的Delphi版本中拖放到项目管理器中(自2006年左右开始))。 (什么?您还在使用Delphi 7吗?) - Reversed Engineer
在XE4中,指令{$R 'myExtraRes.res' 'myExtraRes.RC'}在编译/构建EXE时不会将.rc文件编译成.res文件,不确定原因,只能使用命令行中的BCC32代替... - Edwin Yip

4

因为您想要在一个TMemo中显示文本,所以您可以直接将文本复制/粘贴到设计时的TMemo.Lines属性编辑器中。该文本将被包含在拥有表单/框架的 DFM 资源中,并在编译时自动加载到TMemo中,以供您在运行时使用。


2
我知道,但这不是我想要的。TMemo只是一个例子(也是测试资源字符串是否正确存储的测试)。 - Gabriel

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