Delphi中,如何读取资源文件?

本文介绍了在Delphi中如何读取包含在项目资源中的HTML文件和可执行文件。通过创建资源流并利用TResourceStream类,可以将资源读取到字符串或保存到文件中。
Delphi中,如何读取资源文件? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061110215905161.html
Delphi中,如何读取资源文件?  
   
  我有个html文本,加载到当前的project中,那么在程序运行过程中,如何才能将这  
   
  个html文本的内容读取到一个String中?使用CreateFile、LoadFileStream等函数只能  
   
  读取硬盘中的文件。  
   
  另外,如何将一个可执行文件加载到project中,再在运行过程中,将这个可执行  
   
  文件读取出来?

自己顶一下!

用资源的方式。

就是不知道怎么弄啊。  
  怎么加载资源,怎么读取,能介绍介绍吗?  
 

一个简单的例子:  
  新建一个文本文档,随便添加些内容,命名为:index.htm  
  新建一个文本文档,添加以下内容:  
   
  CrnIndexHtml   RC_DATA   "index.htm"  
   
  然后保存为1.rc  
   
  把上面的1.rc添加到工程中,然后在窗体上放置一个Memo和一个Button,在Button的点击事件中:  
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var  
          rs:   TResourceStream;  
  begin  
          rs   :=   TResourceStream.Create(HInstance,   'CrnIndexHtml',   'RC_DATA');  
          rs.Position   :=   0;  
          Memo1.Lines.LoadFromStream(rs);  
          rs.Free;  
  end;  
   
  编译,就可以看到效果。  
   
  以上代码实现的从资源中读取Htm资源,并将内容读取到Memo中。  
 

至于将可执行文件放到资源中,这样做:  
   
  准备一个exe文件,比如123.exe,放到工程目录下,编辑刚才的1.rc文件,添加一行:  
   
  CrnExeFile   RC_DATA   "123.exe"  
   
  然后在程序中:  
  procedure   TForm1.Button2Click(Sender:   TObject);  
  var  
          rs:   TResourceStream;  
  begin  
          rs   :=   TResourceStream.Create(HInstance,   'CrnExeFile',   'RC_DATA');  
          rs.SaveToFile('c:\ccrun\123.exe');  
          ShellExecute(Handle,   'Open',   'C:\ccrun\123.exe',   nil,   nil,   SW_SHOW);  
          rs.Free;  
  end;  
   
  实际应用中,可以将资源中的文件释放到某个比较隐蔽的目录中。  
   
 

楼主的分好多,老妖发达了~~~

收藏一下

如果不生成磁盘   文件就必须直接映射到内存运行..  
 

靠   老妖别把分全接走了啊     ~~

呵呵,谢谢,老妖解决了我的问题!  
  老妖高手啊,受教了!  
   
  宝剑赠烈士,红粉送佳人,老妖接分!  
  千金散尽还复来!

有机会,以后还要请教老妖!

不知vividw(vividw)所说的方法如何具体如何实现?

转载于:https://www.cnblogs.com/delphi2007/archive/2008/11/05/1326869.html

<think>嗯,用户想在Delphi 7里打开和查看资源文件。首先,我得回忆一下Delphi 7的资源管理方式。记得Delphi通常使用.rc文件来定义资源,然后编译成.res文件,最后链接到可执行文件中。所以,用户可能需要知道如何编辑和查看这些资源文件。 首先,用户可能需要一个资源编辑器Delphi 7自带的Resource Workshop可能已经过时了,或者用户可能没有安装。这时候可能需要推荐第三方工具,比如Resource Hacker,因为免费且好用。另外,用户可能需要知道如何手动添加资源文件到项目中,比如通过Project菜单的“Add to Project”选项,选择.res文件。 然后,用户可能需要查看已有的资源。如果资源是图片、图标或者字符串,Resource Hacker应该能显示出来。但如果是自定义格式的资源,可能需要编写代码来访问,比如使用TResourceStream类。这部分代码示例可能会有帮助,比如如何加载位图或者文本资源。 还要注意,用户可能遇到资源文件无法打开的情况,这时候需要检查是否被其他程序占用,或者路径是否正确。另外,编译后的.res文件是二进制格式,直接用文本编辑器打开可能乱码,所以必须用资源编辑器。 最后,生成相关问题时要考虑用户可能的后续需求,比如如何编辑资源、添加自定义类型,或者处理资源冲突的问题。这些都是用户在使用资源文件时常见的后续步骤,需要提前预见到。</think>### Delphi 7 查看资源文件方法 #### 一、使用内置工具查看资源 1. **资源文件(.res)加载** - 在Delphi 7项目中,默认包含一个与项目同名的.res文件,存储图标、版本信息等基础资源。通过菜单栏选择 `Project > Resources...` 可直接查看和编辑基础资源[^1]。 - 若需添加额外资源文件,可通过 `File > New > Other` 选择 `Resource File` 创建新的.rc文件,编译后将生成对应的.res文件。 2. **资源编辑器调用** - 在代码编辑器中按 `Ctrl+Shift+R` 可快速打开资源管理器(需确保已安装Delphi资源工具包)。 #### 二、第三方工具操作 推荐使用 **Resource Hacker**(免费工具): 1. 下载并安装后,通过 `File > Open` 载入.exe或.res文件 2. 可直观查看以下资源类型: - 位图(BITMAP) - 图标(ICON) - 光标(CURSOR) - 版本信息(VERSIONINFO) ```pascal // 示例:从资源加载位图 procedure TForm1.Button1Click(Sender: TObject); var ResStream: TResourceStream; begin ResStream := TResourceStream.Create(HInstance, 'MY_BITMAP', RT_BITMAP); try Image1.Picture.Bitmap.LoadFromStream(ResStream); finally ResStream.Free; end; end; ``` #### 三、手动访问资源 通过代码直接读取自定义资源: ```pascal // 读取文本资源示例 function LoadTextResource(ResName: string): string; var ResHandle: HRSRC; ResData: HGLOBAL; ResSize: DWORD; begin ResHandle := FindResource(HInstance, PChar(ResName), RT_RCDATA); if ResHandle = 0 then raise Exception.Create('资源未找到'); ResData := LoadResource(HInstance, ResHandle); ResSize := SizeofResource(HInstance, ResHandle); SetString(Result, PChar(LockResource(ResData)), ResSize); UnlockResource(ResData); FreeResource(ResData); end; ``` #### 四、常见问题处理 - **资源冲突**:多个.res文件需在项目文件中用`{$R *.res}`指令明确引用顺序 - **资源更新**:修改.rc文件后需重新编译(`brcc32 MyResource.rc`生成新的.res) - **版本信息修改**:推荐使用专用工具[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值