Delphi 资源文件

资源文件在 Windows 下都是通用的,扩展名为 .res。

一、资源集成到可执行文件。

1、建立资源描述文件

建立资源描述文件,扩展名为 .rc,格式如下:

stringtable  //定义字符串
{
8001,"这是资源文件的第8001号文字"
8002,"这是资源文件的第8001号文字"
8003,"这是第一行\x0d\x0a\这是第二行\x0d\x0a\这是第三行"
}
mycur cursor  光标.ani
mypic Bitmap  位图.bmp
mywav WAVE    声音.wav
myAVI AVI     无声动画.avi
myIco ICON    图标.ico
#define ConstVar 1 // 定义常量
标识 意义  
stringtable 文字  
bitmap BMP 图象  
cursor 光标  
icon 图标  
wave 声音  
jpeg JPG 图象  

2、生成资源文件

Brcc32.exe 资源.rc

3、包含资源文件

{$R 资源文件.res}

4、使用资源

LoadResource

标识 使用方法
stringtable LoadStr(strID) : string
bitmap Image1.picture.Bitmap.Handle := LoadBitmap(Hinstance, 'mybmp');
Picture.Bitmap.LoadFromResourceName(HInstance, '位图.bmp');

var
   resStream: TResourceStream;
begin
   resStream := TResourceStream.Create(HInstance, 'testBmp', 'bmptype');
   Image1.Picture.Bitmap.LoadFromStream(resStream);
   resStream.Free;
end;

cursor screen.cursor[35] := LoadCursor(Hinstance, 'mycur');
Panel1.cursor := 35;
icon Application.Icon.Handle := LoadIcon(HInstance, 'MyIco');
wave Playsound(pchar(''mywav''),hinstance,sndsync or snd_resource);
avi animater1.resname:='myAVI';
Animate1.Active := True;

二、资源存于单独的 DLL 文件中

建立如下的 .dpr 工程,编译生成 DLL 文件。

生成资源的工程代码 library Icon;
{$R Icon.RES}
begin
end.
使用外部资源 Hinst:=Loadlibrary('Icon.dll');
Hicon:=Loadicon(Hinst,'myico');
FreeLibrary(Hinst);

示例:显示资源中的 JPG 图象

项目 内容
.RC bb jpeg img.jpg
资源文件 {$R 'JPEG.res'}
控件 Image1: TImage;
BitBtn1: TBitBtn;
代码1 procedure TForm1.BitBtn1Click(Sender: TObject);
var
    stream : TStream;
    MyJPG : TJpegImage;
begin
    stream:=tresourcestream.Create(hinstance,'bb','jpeg');
    Try
        MyJpg:=TJpegImage.Create;
        Try
            MyJpg.LoadfromStream(Stream);
            Image1.Picture.Assign(MyJpg);
        Finally
            MyJpg.Free;
        end;
    Finally
        Stream.Free;
    end;
end;
代码2 var
   jpg: TJPEGImage;
   resStream: TResourceStream;
begin
   jpg := TJPEGImage.Create;
   resStream := TResourceStream.Create(HInstance, 'testJpg', 'jpgtype');
   jpg.LoadFromStream(resStream);
   Image1.Picture.Assign(jpg);
   jpg.Free;
   resStream.Free;
end;