资源文件的编译
通常在Delphi的应用程序中,我们会调用到很多的资源,例如图片,动画(AVI),声音,甚至于别的执行文件。当然,把这些资源分布到不同的目录不失为一个好办法,但是有没有可能把这些资源编译成标准的windows资源从而链接到一个执行文件里面呢?
我们可以自己做一个RC文件,例如 sample.rc ,RC文件其实就是一个资源文件的描述文本,通过“记事本”程序创建就行了。然后可以输入一些我们要定义的资源,例如:
MEN BITMAP c:\bitmap\men.bitmap
ARJ EXEFILE c:\arj.exe
MOV AVI c:\mov.avi
其中 BITMAP 、EXEFILE、AVI 可是自己定义名称
然后用BRCC32把这个RC文件编译成sample.res(真正的资源文件)。brcc32.exe 只编译,brc32.exe不但编译,也可与exe文件连接
在Delphi的工程文件中使用 $R 编译指令让Delphi包括资源到EXE文件里面。
{$R sample.res}
这样我们就可以在这个单一的执行文件中调用资源了。举例如下:
EXEFILE:
procedure ExtractRes(ResType, ResName, ResNewName : String);
var
Res : TResourceStream;
begin
Res := TResourceStream.Create(Hinstance, Resname, Pchar(ResType)); Res.SavetoFile(ResNewName);
Res.Free;
end;
AVI:
procedure LoadAVI;
begin
{Avi1是一个TAnimate类}
Avi1.ResName:='AVI';
Avi1.Active:=True;
end;
加载JPEG图片文件时需要用以下的方法实现:别忘了加Jpeg单元哟
var
Stream : TResourceStream;
DLLHandle: THandle;
Jpg:TJpegimage;
begin
DLLHandle := LoadLibrary('dlls/Res.dll');
try
Jpg := TJPEGImage.Create;
Stream := TResourceStream.Create(DLLHandle, 'Mainimg', 'JPEG');
Jpg.LoadFromStream(Stream);
img1.Picture.Assign(Jpg);
finally
FreeLibrary(DLLHandle);
Stream.Free;
Jpg.Free;
end;
end;