- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[转]Delphi中资源文件的使用Delphi中,生成一个Appliction工程时,会默认生成一个与工程同名的资源文件,即使删除也会再度创建,但是这个资源文件中只有一个图标和一个版本信息。
通常情况下,我们还需要更多的多种多样的资源,虽然可以在IDE中载入并编译到EXE文件中去,但是有时我们需要将资源与EXE分开,以便生成多语言程序或将程序改为其它语言(如汉化)。
Delphi附带的ImageEdit可以编辑资源文件,但只能编辑位图、图标和光标,无法加入字符串资源,而且只持256色的图像。为了将更多种类的资源,只有编写资源脚本或者使用其它资源编辑器,如Visual Stadio 6。不过,Visual Stadio 6编辑的资源文件中包含了C++头文件定义,并且支持的具体资源类型较多,在Delphi中是无法识别的。
只好选择编写资源脚本了,资源脚本文件扩展名为.RC,可以用纯文本编辑器编写。如下面是两个图标与两个字符串的脚本:
COMPUTER RCDATA computer.ico /* Delphi中只支持RCDATA类型 */
WINDOWSXP RCDATA XP.ico
?
STRINGTABLE
BEGIN
1 computer(电脑)
2 Windows XP
END
将其保存为MyRes.rc,需要注意的是,这里包含了两个图标,注意文件名及路径(这里是与文件同一目录)。在命令提示符窗口中将目录切换到MyRes.rc所在的路径,运行brcc32 MyRes.rc,其中brcc32.exe是Delphi附带的资源编译工具。如果想将资源文件生成其中扩展名的文件(如.DLL),可以增加-fo参数,如:brcc32 MyRes.rc –of MyRes.dll。
?
接下来是对资源的引用,引用方法有静态与动态两种,静态引用就是将资源文件包含到源码中编译到EXE中去;动态引用则是把资源文件当成DLL动态装载。
静态引用资源文件在Delphi中是最简单不过了,只要在工程文件中加入一个编译指令即可,如:
program Multi_Lang;?
uses
Forms,
TestFormUnit in TestFormUnit.pas {TestForm};?
{$R MyRes.dll} // 包含自定义的资源文件
{$R *.res} // 包含默认的资源文件?
begin
Application.Initialize;
Application.CreateForm(TTestForm, TestForm);
Application.Run;
end.
引用时,字符串只要LoadStr(Index)即可,而其它资源用TResourceStream读取,只不过资源句柄就是程序本身,直接用hInstance就可以了。如:
procedure TTestForm.ReadDirect(Index: Integer);
var
Stream: TResourceStream;
Icon: TIcon;
S: String;
begin
Edit1.Text:= LoadStr(Index); // 在TEdit控件中显示所获取的字符串
if Index = 1 then
S:= COMPUTER
else
S:= WINDOWSXP;
// Delphi中只支持RT_RCDATA类型读取
Stream:= TResourceStream.Create(hInstance, S, RT_RCDATA); // 使用hInstance句柄
try
Icon:= TIcon.Create;
try
Icon.LoadFromStream(Stream);
Image1.Picture.Icon.Assign(Icon); // 是TImage控件中显示所获取的图标
finally
Icon.Free;
end;
finally
Stream.Free;
end;
end;
这种引用方式在编译就将资源与EXE文件链接在一起,而编译之后就不再需要资源文件了。
动态引用方式相对更多加灵活,编译时不需要资源文件,而是在运行时动态地入,这样便可以控件载入不同的资源文件,这也是实现多语言程序的一种方法。
动态引用实际上只是将资源文件静态包含到另一个工程(一般为DLL程序)中,如:
library MyResDll;?
uses
SysUtils,
Classes;?
{$R MyRes.dll} // 将资源文件包含到DLL工程中?
ResourceString
文档评论(0)