在delphi项目中,通常有一个与项目名称主文件名相同的.res文件,该文件用于保存应用程序图标等资源,对应于此文件,在项目文件中一定含有编译指示“{$r *.res}”,告诉编译器编译时需要包含与项目主文件名相同的.res文件。 同样,如果需要在应用程序中以资源形式包含任何文件类型,也可以利用.res文件。本文将告诉你如何利用res文件在delphi程序内部包含文件。
一创建.res文件
这里以一组音频文件为例。首先用记事本等任何文本编辑器编写文件“mymusic.rc”。文件的格式及内容如下:
src1 file1 onlyyou.mp3
src2 file2 yesterdayoncemore.mp3
src3 file3 moonriver.mp3
其中,每一行表示声明一项资源,每一项资源的声明包含三个参数定义,第一个参数是资源的名称,第二个参数是资源的类型描述(本例定义了三类),第三个参数是文件名。参数之间必须由空格隔开。
编写完成“mymusic.rc”文件后,将其与上述三个.mp3文件放置在同一文件夹中(为了避免由设置路径带来的麻烦)。然后以下面的命令行运行应用程序brcc32.exe(位于..\delphi6\bin):brcc32 mymusic.rc需要注意的是,该命令只能在命令行方式下执行。如果系统的path环境变量中不包含delphi的运行路径,那么你还需要将brcc32.exe与mymusic.rc、三个.mp3文件放置在同一路径中进行。运行上述命令行后,将在同一路径中得到文件“mymusic.res”,这就是一个独立完整的资源文件,其格式是遵循windows 标准的,因此可以在诸如vb、vc、cbuilder等多种开发环境中使用。
二在程序中声明包含.res文件
你只需要在项目中的某个单元中(最好是你需要利用这些资源的单元,这样会使你的应用程序更具有可读性)加入如下编译指示:
$r mymusic.res}
{
尽管该编译指示可以位于单元的任何位置,但为了使你的源代码结构合理,最好还是将其并列位于编译指示“{$r *.dfm}”(每个含有窗体文件的单元中都含有该行编译指示)。这里的编译指示就明确告诉编译器,在编译应用程序时需要将资源文件“mymusic.res”包含到应用程序中。
三在运行时获取资源
上述两步工作仅仅是基础(但一定是必要的),利用资源才是根本目的。下面的过程将告诉你如何将应用程序中包含的资源(文件)重新还原。
procedure musicrestofile(const resname, restype,filename: string);
var
res: tresourcestream;
begin
res := tresourcestream.create(hinstance,resname, pchar(restype));
res.savetofile(filename); //将资源保存为文件,即还原文件
//你还可以进行其它的流操作,在内存中实现对资源利用而不必另存为文件
res.free;
end;
调用该过程的示例如:
musicrestofile('src2', 'file2', 'thesecondmusic.mp3');
值得一提的是,利用此方法,你完全可以制作自己的安装程序,该安装程序仅包含一个可执行文件,在该可执行文件中以资源的形式包含所有将要安装的内容(文件)。此外,如果在你的应用程序中需要播放外部音频文件(如背景音乐、声音提示等),也可通过此方法将这些外部文件包含到应用程序中,从而避免用户误删这些音频文件导致应用程序的不完整。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器