Delphi使用资源文件全攻略

简介:
本文为原创,如需转载,请注明作者和出处,谢谢!

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

本文转自银河使者博客园博客,原文链接http://www.cnblogs.com/nokiaguy/archive/2008/05/16/1201100.html如需转载请自行联系原作者


银河使者

相关文章
|
6月前
|
人工智能 数据库 决策智能
Archon – 开源 AI 智能体框架,自主生成代码构建 AI 智能体
Archon 是一个开源的 AI 智能体框架,能够自主生成代码并优化智能体性能,支持多智能体协作、领域知识集成和文档爬取等功能,适用于企业、教育、智能家居等多个领域。
600 10
Archon – 开源 AI 智能体框架,自主生成代码构建 AI 智能体
|
5月前
|
安全 Java 数据安全/隐私保护
Spring Security: 深入解析 AuthenticationSuccessHandler
本文深入解析了 Spring Security 中的 `AuthenticationSuccessHandler` 接口,它用于处理用户认证成功后的逻辑。通过实现该接口,开发者可自定义页面跳转、日志记录等功能。文章详细讲解了接口方法参数及使用场景,并提供了一个根据用户角色动态跳转页面的示例。结合 Spring Security 配置,展示了如何注册自定义的成功处理器,帮助开发者灵活应对认证后的多样化需求。
163 2
|
8月前
|
存储 SQL 大数据
Python 在企业级应用中的两大硬伤
关系数据库和SQL在企业级应用中面临诸多挑战,如复杂SQL难以移植、数据库负担重、应用间强耦合等。Python虽是替代选择,但在大数据运算和版本管理方面存在不足。SPL(esProc Structured Programming Language)作为开源语言,专门针对结构化数据计算,解决了Python的这些硬伤。它提供高效的大数据运算能力、并行处理、高性能文件存储格式(如btx、ctx),以及一致的版本管理,确保企业级应用的稳定性和高性能。此外,SPL与Java无缝集成,适合现代J2EE体系应用,简化开发并提升性能。
|
机器学习/深度学习 存储 算法
MOF
金属有机框架(MOF)材料是一种由金属离子或簇与有机配体构成的三维网状结构,具有大的比表面积、高的孔隙率、可控的结构和性质等优点。由于其独特的结构和性质,MOF材料在能源存储、同位素分离、生物医疗等领域具有广泛的应用前景。
581 1
|
存储 安全 Go
tar 归档文件处理操作指南
tar 归档文件处理操作指南
251 0
|
存储 弹性计算 负载均衡
SLB-工作负载(Workload)
SLB-工作负载(Workload)
740 0
|
存储 编解码 算法
如何免费、轻松地将ISO文件转换为MKV?
ISO 文件通常较大,会占用大量硬盘空间,而 MKV 文件较小且更易于管理。因此,将 ISO 映像文件转换为 MKV 是减少文件大小并避免不兼容的有效方法。本文将指导您如何在Mac或Windows上将DVD/蓝光 ISO 转换为 MKV。
4920 1
|
分布式计算 Ubuntu IDE
大数据入门系列 5:全网最全,Hadoop 实验——熟悉常用的 HDFS 目录操作和文件操作
大数据入门系列 5:全网最全,Hadoop 实验——熟悉常用的 HDFS 目录操作和文件操作
1628 0
大数据入门系列 5:全网最全,Hadoop 实验——熟悉常用的 HDFS 目录操作和文件操作
|
JSON 算法 前端开发
什么是JWT?深入理解JWT从原理到应用(上)
什么是JWT?深入理解JWT从原理到应用(上)
2787 0
|
Linux 数据处理 Ruby
cdo (Climate Data Operators ) 常用命令介绍:(查看文件信息、多文件合并、数据裁剪、数据插值、数据计算。。)
cdo (Climate Data Operators ) 常用命令介绍:(查看文件信息、多文件合并、数据裁剪、数据插值、数据计算。。)
cdo (Climate Data Operators ) 常用命令介绍:(查看文件信息、多文件合并、数据裁剪、数据插值、数据计算。。)