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

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

转载于:https://www.cnblogs.com/nokiaguy/archive/2008/05/16/1201100.html

Delphi使用资源文件全攻略相关推荐

  1. 用C#制作PDF文件全攻略 (专至csdn)

    前 言 丽水市汽车运输集团有限公司信息中心 苟安廷 PDF文件是目前比较流行的电子文档格式,在办公自动化(OA)等软件的开发中,经常要用到该格式,但介绍如何制作PDF格式文件的资料非常少,在网上搜来搜 ...

  2. 《用C#制作PDF文件全攻略》

    用C#制作PDF文件全攻略 StreamWriter pPDF=new StreamWriter(filePath); ArrayList xRefs=new ArrayList(); float y ...

  3. iTextSharp 使用详解用C#制作PDF文件全攻略

    iTextSharp 使用详解&用C#制作PDF文件全攻略 http://blog.csdn.net/gatr/article/details/278173 转载于:https://www.c ...

  4. [PDF文件全攻略]-PDF二次开发(.NET开发 C++开发 Java PHP)

    原文:http://www.cankau.cn/news/tech/2009112016.html [PDF文件全攻略]-PDF二次开发(.NET开发 C++开发 Java PHP) 2009-11- ...

  5. 用C#制作PDF文件全攻略(转)

    PDF文件是目前比较流行的电子文档格式,在办公自动化(OA)等软件的开发中,经常要用到该格式,但介绍如何制作PDF格式文件的资料非常少,在网上搜来搜去,都转贴的是同一段"暴力"破解 ...

  6. 用C# itextsharp.dll制作PDF文件全攻略

    StreamWriter pPDF=new StreamWriter(filePath); ArrayList xRefs=new ArrayList(); float yPos =0f; long ...

  7. Asp.net C#制作PDF文件全攻略

    StreamWriter pPDF=new StreamWriter(filePath); ArrayList xRefs=new ArrayList(); float yPos =0f; long ...

  8. 制作PDF文件全攻略

    前 言 丽水市汽车运输集团有限公司信息中心 苟安廷 PDF文件是目前比较流行的电子文档格式,在办公自动化(OA)等软件的开发中,经常要用到该格式,但介绍如何制作PDF格式文件的资料非常少,在网上搜来搜 ...

  9. 用C#製作PDF文件全攻略

    PDF文件是目前比較流行的電子文檔格式,在辦公自動化(OA)等軟件的開發中,經常要用到該格式,但介紹如何製作PDF格式文件的資料非常少,在網上搜來搜去,都轉貼的是同一段「暴力」破解的方法,代碼片斷如下 ...

最新文章

  1. pandas中的3种基本数据类型介绍
  2. 成功解决python\ops\seq2seq.py TypeError: ms_error() got an unexpected keyword argument 'logits'
  3. 转载 干货 | 1400篇机器学习的文章中,这10篇是最棒的!
  4. android builder里面存放两个edittext,android – AlertDialog中的多个EditText对象
  5. Java--transient
  6. Effective C# Item18:实现标准Dispose模式
  7. 什么是mixin,为什么它们有用?
  8. React Component Lifecycle(生命周期)
  9. 《数据结构》二叉查找树
  10. vuex模块相互调用
  11. 移动端设计尺寸基础知识
  12. 数据库变为可疑_数据库出现可疑解决办法
  13. 初中计算机考试素材,初中信息技术素材.ppt
  14. 启动Apache时提示缺少vcruntime140.dll怎么解
  15. 交换机配置VLAN(思科模拟器实现)
  16. [AC自动机+dp] whu oj 1572 I - Cyy and Fzz
  17. 查看个人电脑公网 IP 地址
  18. form 表单 onsubmit 属性
  19. h5逻辑_H5+app 混合开发
  20. 高通平台开发系列讲解(外设篇)BMI160介绍

热门文章

  1. python csv读取-Python对于CSV文件的读取与写入
  2. python爬虫原理-python爬虫从入门到放弃(二)之爬虫的原理
  3. python类装饰器详解-Python类中的装饰器在当前类中的声明与调用详解
  4. 苹果电脑安装python-4. 在苹果系统上使用 Python
  5. python xpath语法-Python爬虫:Xpath语法笔记
  6. 编程没基础学python多长时间--零基础学Python,从入门到精通需要多长时间
  7. python快速自学方式-Python自学之路 ,自学Python快速入门方法
  8. python网上编程课程-少儿编程 为你解读Python编程课程
  9. python比c语言好学吗-python和c语言哪个更适合初学者
  10. python软件是免费的吗-python属于软件吗