Delphi使用资源文件全攻略-阿里云开发者社区

开发者社区> geekori> 正文

Delphi使用资源文件全攻略

简介: 本文为原创,如需转载,请注明作者和出处,谢谢!    在通常情况下使用delphi设计程序,都是将字符串、图像等资源直接使用delphi提供的vcl控件加到*.dfm中,这样做会合修改这些资源时带来 不便,如果资源被多次引用,这些资源在程序启动时都被加载到内存中,非常耗费系统资源。
+关注继续查看
本文为原创,如需转载,请注明作者和出处,谢谢!

    在通常情况下使用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将资源保存成文件,或做其它处理。



国内最棒的Google Android技术社区(eoeandroid),欢迎访问!

《银河系列原创教程》发布

《Java Web开发速学宝典》出版,欢迎定购

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
DJango 1.8 配置静态资源文件可访问
1、在settings.py中加入静态文件的定义 STATIC_URL = '/static/' //设置STATIC_URL为存储静态文件的路径(基于根目录) STATICFILES_DIRS = ( os.
629 0
C#图片存到资源文件,以及调用图片
版权声明:欢迎评论和转载,转载请注明来源。 https://blog.csdn.net/zy332719794/article/details/8971154 在程序中会用到图片,有两种方法,一种是将图片放在运行文件夹中,直接调用,另一种是将图片放入资源文件中。
788 0
PHP 使用 OSS上传文件
PHP 使用 OSS上传文件
2888 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
7740 0
Delphi单元文件之-防止程序重复执行
//工程引用此单元就能防止同时出现多个实例unit MultInst; interface uses Windows ,Messages, SysUtils, Classes, Forms; implementation const  STR_UNI...
676 0
【汇编语言/底层开发】4、使用masm编译、链接汇编源文件
0、准备工作: 由于现在我们的操作系统通常都是win7或者win8,所以要运行masm需要做一些准备工作。这里只简单描述一下过程,详细的请搜索这篇文章《Win7(64位)下使用MASM和DEBUG方法》。
857 0
使用developer kit 初步打通阿里生活物联网平台
最近小编又发现了一块新大陆,阿里智能生活平台,那么什么是阿里智能生活平台呢。阿里的官方解释如下:生活物联网平台,顾名思义就是应用于生活,以解决家电设备快速智能化的问题。平台针对家电智能化的设备连接、移动端控制、设备管理、数据统计等问题,打包阿里云多款产品,提供了一整套配置化方案,大幅减低“设备-云端-App”的开发成本。
1410 0
DelayQueue延时队列使用
DelayQueue延时队列使用
2566 0
+关注
geekori
欧瑞科技创始人&CEO,东北大学计算机专业硕士,拥有超过20年软件开分经验。欧瑞学院金牌讲师、51CTO学院金牌讲师、CSDN学院特约讲师、畅销书作者,企业内训讲师。曾出版过超过30本IT畅销书,涉猎移动开发、跨平台开发、机器学习、区块链、大数据、编译器等领域。
419
文章
1
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载