博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Delphi使用资源文件全攻略
阅读量:5926 次
发布时间:2019-06-19

本文共 2373 字,大约阅读时间需要 7 分钟。

  在通常情况下使用delphi设计程序,都是将字符串、图像等资源直接使用delphi提供的vcl控件加到*.dfm中,这样做会合修改这些资源时带来不便,如果资源被多次引用,这些资源在程序启动时都被加载到内存中,非常耗费系统资源。因此,这就需要一种新的引用资源的文件:资源文件。资源文件就是将一些资源,如字符串、图像等信息进行编译,然后在程序中引用编译后的资源文件,最后和源程序一起编译生成可执行文件。由于在资源文件中的资源是在需要时加载,因此,比较节省系统资源,而且,如果要做国际化版本的系统,只需要将资源文件一换,重新编译即可。下面就详细介绍delphi中资源文件的建立和使用。


一、建立资源文件


    资源文件的源文件是普通的文本文件,扩展名是*.rc。将资源文件的内容写入文件后,调用brcc32.exe将其编译后生成*.res文件。brcc32.exe在delphi的bin目录中。


二、字符串资源


    字符串资源实际上是将一个字符串和一个数字索引对应,在装载字符串资源时,需要提供这个字符串资源所对应的数字索引。字符串资源文件以stringtable开头,使用一对begin和and将资源定义括起来。 字符串资源的格式是:数字索引,"资源字符串"。

string.rc文件内容

stringtable

begin

1001, "新建"

1002, "保存"

1003, "关闭"

1004, "帮助"

1005, "退出"

1006, "资源文件测试"

End

    然后调用命令:brcc32.exe string.rc ,生成string.res,最后在程序中加入{$R string.res}。以下所述的*.rc文件都需使用类似的方法进行编译和引用。


    在delphi中有两种方法可以装载字符串资源。

    1. 使用Windows API函数LoadString。使用这个函数需要定义一个char数组,调用的形式如下。


    LoadString(hInstance, 1001, buffer, 100); //100:buffer数组的最大长度,1001:数字索引


    2. 使用delphi自身的函数LoadStr。这个函数只需要一个数字索引就可得到相应的字符串资源。调用的形式如下。


    button2.Caption := LoadStr(1002);


三、Bitmap资源


    位图资源的定义就相对简单得多。每个位图资源只需要定义三项:位图标识 位图类型 位图文件名 (这三项中间用空格或tab隔开)其中位图标识和字符串资源的数字索引类似,只是位图标识可以是字符串。位图类型是BITMAP。


    调用bitmap资源有两种比较常用的方法。

    1. 使用bitmap的LoadFromResourceName方法。

    2. 使用windows API函数LoadBitmap。这种方法的代码示例如下:

    bmp := TBitmap.Create ;

    bmp.Handle := LoadBitmap(Hinstance,'bmp');

    rect.Left := 0;

    rect.Top := 0;

    rect.Right := image2.Width;

    rect.Bottom := image2.Height;       

    rect1.Left := 0;                        

    rect1.Top := 0;

    rect1.Right := bmp.Width;

    rect1.Bottom := bmp.Height;

    image2.Canvas.CopyRect(rect, bmp.Canvas, rect1);

    第一种方法比较简单,但如果是拉伸装载时,第二种方法效果比较好。也可用类似的方法装载icon和cursor文件,其中装载icon使用LoadIcon,装载cursor使用LoadCursor。


四、Jpeg资源


    装载Jpeg资源没有Windows API,但可以使用delphi提供的TResourceStream类。在定义资源文件时,资源类型使用RCDATA。示例代码如下:

   jpg := TJpegImage.Create ;

   rstream := TResourceStream.Create(Hinstance, 'jpg', RT_RCDATA) ; 

   jpg.LoadFromStream (rstream) ;

   image3.Picture.Bitmap.Assign (jpg);


五、装载任意文件


    资源文件中不仅可以存储已知类型的资源,如字符串、bitmap、jpeg等,还可以存储任意类型的文件。除了字符串,其它类型的资源文件的格式类似,只是在资源类型上有所变化。除了已知的资源类型外,可以自定义资源类型。如jpeg资源可以不用RCDATA,而用JPEG,但在调用时需要做如下处理。

rstream := TResourceStream.Create(Hinstance, 'jpg1', 'JPEG') ; 


六、从其它程序装载资源


    在上述的例子中的资源都是从当前的exe中装载,但有些时候需要从另外的exe或dll,而不是自身装载资源。对于这种需求只要在上述例子中将Hinstance改为LoadLibrary(exe或dll名)即可。

  rstream := TResourceStream.Create(LoadLibrary('project1.exe'), 'jpg1', 'JPEG') ;

  在装载后,可以使用TResourceStream的SaveToFile将资源保存成文件,或做其它处理。

 本文转自 androidguy 51CTO博客,原文链接:http://blog.51cto.com/androidguy/215401,如需转载请自行联系原作者

你可能感兴趣的文章
Golang并发模型:合理退出并发协程
查看>>
中级工程师之路
查看>>
《设计模式》3.结构型模式
查看>>
复习Javascript专题(一):基本概念部分
查看>>
实践App内存优化:如何有序地做内存分析与优化
查看>>
JS专题之节流函数
查看>>
962-最大宽度坡
查看>>
Array 的一些常用 API
查看>>
Javascript基础之-Promise
查看>>
8支团队正在努力构建下一代Ethereum
查看>>
程序人生:织梦dedecms后台/会员验证码关闭
查看>>
【Redis源码分析】Redis命令处理生命周期
查看>>
springboot ElasticSearch 简单的全文检索高亮
查看>>
「前端早读君007」css进阶之彻底理解视觉格式化模型
查看>>
微信小程序仿微信SlideView组件slide-view
查看>>
php异常处理的深入
查看>>
【前端芝士树】Javascript的原型与原型链
查看>>
阻止中文输入法输入拼音的时候触发input事件
查看>>
纯css实现漂亮又健壮的tooltip
查看>>
css选择器总结
查看>>