【发布时间】:2012-11-21 10:39:48
【问题描述】:
我需要在资源文件中循环并使用以下语句加载所有 BMP 文件; bBitmap.Handle := LoadBitmap(hInstance, 'IMAGE_NAME');
如何循环资源文件;我是否必须进行常规 IO 操作并将其视为文本文件?我可以读取每一行并创建一个位图名称列表,而不是在单独的循环中执行上述语句来加载位图。或者 Delphi 库中是否有内置方法来执行此操作?
FILE_NAME_1 位图“btnFile1.bmp”
FILE_NAME_2 位图“btnFile2.bmp”
....
【问题讨论】:
-
资源是可执行文件内资源部分中的二进制块。一旦构建了可执行文件,就没有“资源文件”,而且它绝对不是文本格式。 “资源文件”是一个预编译的二进制文件,它在创建时链接到可执行文件;资源文件是从文本“资源脚本”中的源代码创建的(除非它是由 IDE 预先创建为二进制文件)。
-
好吧,您可以破解它,以便将 .RC 文件作为常量值包含在您的应用程序代码中。然后,您的应用程序可以解析常量,检索所有图像名称并加载它们。像
const RC_CONTENTS = '''' {$INCLUDE MYRCFILE.RC} '''';之类的东西你可能不得不重命名 .rc 才能使它工作(或者 res 将被包含两次),你可能会发现如果可能的话,获得正确的引号会很麻烦。跨度> -
谢谢。我看到我必须预先定义值并使用它们。我将尝试按照 Marjan 的建议将这些值包含为常量。在最坏的情况下,我可能会创建一个字符串数组。不过图片列表很长。
-
XNResource Editior 是 AFAIK 开源 delphi。所以它可以列出资源,你可能会在那里找到一些东西。
-
您可以使用 WinAPI 函数 EnumResourceNames,我怀疑 XNResource Editor 使用它来列出它们(正如 @bummi 提到的)。我没有方便的 Delphi 示例,但是快速的 SO/MSDN 搜索也没有找到。
标签: delphi embedded-resource resource-file