转一个
以前有不少文章也是关于这个问题的,不过这些老文章里讲述的方法通常让你需要做较多的工作,而其实并不需要这么工作,因为在Delphi5中的更加简便的方法。
首先,我想给你介绍一下Delphi5自带的一个演示程序。这个程序叫"Resource Explorer",你可以在"'Delphi5'/Demos/Resxplor"目录下找到,这个程序的功能,也许你已经猜到了,就是浏览资源(Resource)。
这是程序一个小巧而方便的工具,它可以将任何资源文件从一个dll或者执行文件中分离出来,使用它你会惊奇地发现原来在winword.exe中包含了如此之多的资源。在这里,我们使用这个工具只是用来确认我们已经将资源文件加入到我们的测试文件中。
使用Delphi5,增加资源或者从exe文件中释放资源是非常简单的,你可以按以下步骤进行:
1.开始一个新的应用工程(选择菜单 File | New Application),然后增加一个文件文件到工程中(File | New… --> Text)。这个文本文件将包含你所有的资源,格式是"资源名 资源类型 文件名",例如"PDF RCDATA foo.pdf",其中RCDATA表示这是一个任意的二进制文件。如果你想加入更多的资源,就加入更多的行。在这一步中最后需要做工作就是保存工程,这里需要注意的是,Delphi编辑器会自动为你的文本文件加上".txt"扩展名,而我们需要的是".rc"扩展名。你可以强制Delphi以".rc"扩展名保存文件,只需要给文件名加上双引号,例如“"MyResources.rc"”。
2.编译你的工程文件,确认你的资源已经被加入到执行文件中。运行"Resource Explorer",打开你的执行文件,然后检查你的资源是否加入到"RCData"之下。
3.现在该把你的资源文件从执行文件中释放出来了。Borland的程序员们已经编写了相应的代码,这让你使用起来非常容易。所有的代码已经封装在TResourceStream中,你所需要做的就是以下工作:
procedure TForm1.Button1Click(Sender: TObject);
var
RS : TResourceStream;
begin
RS := TResourceStream.Create( 0, 'PDF', RT_RCDATA);
try
RS.SaveToFile('bar.pdf');
finally
RS.Free;
end;
end;
TResourceStream.Create创建一个资源流(Stream),包含了当前进程"0"中名字为"PDF"的资源,它被预定义为常量类型"RT_RCDATA"。