delphi资源文件(学习记录)

  几乎每一个Windows应用程序都使用图标、图片、光标等资源。资源是程序的一部分,可是它是不可执行代码。下面咱们就详细介绍资源文件在Delphi中创建和使用方法。数组

    1.把资源放到exe文件的优势 因为定位资源比在磁盘中定位文件花费时间少,因此应用程序执行会更快。多种资源能够放在一个文件中,减小了图标、图片、光标等文件数量。保存资源文件时不要和工程名相同,由于Delphi建立工程时会自动建立一个和工程名相同的资源文件。而且最好将资源文件保存到和工程文件同一个文件夹中。函数

2.建立资源文件 
首先建立一个.Rc的纯文本文件。格式以下: 资源标识符 + 关键字 + 资源文件名 
① 资源标识符:程序中调用资源时的特殊标号; 
② 关键字:标识资源文件类型; 
Wave: 资源文件是声音文件; RCDATA: JPEG文件; AVI: AVI动画; ICON: 图标文件; 
BITMAP: 位图文件; CURSOR: 光标文件;  
③ 资源文件名:编译的资源文件,好比动画、位图、光标等; 
④ 如:MyWav WAVE "FileName.Wav"  // 此时FileName.Wav 与 rc文件在同一文件夹下
使用Borland资源编译器(BRCC32.EXE)转化.Rc文件成.Res文件。在DOS命令行下输入下列命令: 
Brcc32 FileName.Rc // Brcc32.Exe在Delphi5\Bin文件下。动画

3.在工程中引用资源文件 
为了存取咱们的资源文件,必须告诉Delphi连接咱们的资源文件到应用程序中。spa

所以咱们能够在源代码中加入一条编译指令完成上述功能。这条指令必须紧跟在窗口指令后,以下形式: 命令行

{$R *.DFM} //Delphi自带编译指令 
{$R FileName.Res} //新加入的编译资源文件的指令。 orm

不要删除{$R *.DFM}指令,由于这行代码告诉Delphi连接下面的资源到窗口的资源中。索引

4.调用资源文件 
(1)存取资源文件中的位图(Bitmap) 
程序中若是想存取资源,你必须调用一些Windows API函数。保存在资源文件中的位图、光标和图标能够经过调用LoadBitmap、LoadCursor和LoadIcon函数存取。 图片

本例举例说明如何存取资源文件中位图并显示在Timage控件中。 
procedure TfrMain.btnCanvasPic(Sender: TObject); 
Image1.Picture.Bitmap.Handle :=LoadBitmap(hInstance, '资源标识符'); 
end; 
注:若是位图没有装载成功,程序仍旧执行,可是Image将再也不显示图片。ci

你能够根据LoadBitmap函数的返回值判断是否装载成功,若是装载成功返回值是非0,若是装载失败返回值是0。 资源

另一个存取显示位图的方法以下 
procedure TfrMain.btnLoadPicClick(Sender: TObject); 
begin 
Image1.Picture.Bitmap.LoadFromResourceName(hInstance, '资源标识符'); 

end;  

(2)存取资源文件中的光标 
Screen.Cursors[]是一个光标数组,使用光标文件咱们能够将定制的光标加入到这个属性中。

由于默认的光标在数组中索引值是0,因此除非想取代默认光标,最好将定制的光标索引值设为1。 

procedure TfrMain.btnUseCursorClick(Sender: TObject); 
begin 
Screen.Cursors[1] :=LoadCursor(hInstance,'资源标识符'); 
Image1.Cursor :=1; 
end; 
(3)存取资源文件中的图标 
将图标放在资源文件中,能够实现动态改变应用程序图标。 
procedure TfrMain.LoadIconClick(Sender: TObject); 
begin 
Application.Icon.Handle := LoadIcon(hInstance, '资源标识符'); 
End; 
(4)存取资源文件中的AVI 
procedure TfrMain.LoadIconClick(Sender: TObject); 
begin 
Animate1.ResName :='MyAvi' ; //资源标识 
Animate1.Active :=True ; 
End ; 
(5)存取资源文件中的JPEG 
把jpeg单元加入到Interface的uses单元中。 
procedure TForm1.LoadJPGClick(Sender: TObject); 
var 
Fjpg : TJpegImage ; 
FStream :TResourceStream ; 
begin 
Fjpg :=TJpegImage.Create ;  
FStream := TResourceStream.Create (Hinstance,'资源标识符',RT_RCDATA) ; 
FJpg.LoadFromStream (FStream) ; 
Image1.Picture.Bitmap.Assign (FJpg); 
end; 
(6)存取资源文件中的Wave 
把MMSystem加入到Interface的uses单元中 
procedure TForm1.LoadWaveClick(Sender: TObject); 
begin 
PlaySound('MyWav', HInstance, Snd_ASync or Snd_Memory or snd_Resource) ; 
end; 
5.结束语 
位图、光标和图标、AVI动画、JPEG和Wave文件等能够放到资源文件中,上面咱们介绍了如何将资源加入到资源文件中,并介绍了在Delphi中动态存取资源文件的方法。Delphi编译工程会自动建立一个和工程名相同的资源文件(若是没有其余的资源,主窗口的图标会放在这个资源文件中)。可是建议最好不要改变这个资源文件。

    若是感受上面的麻烦的话,将 RC 文件直接添加到项目中,在编译Delphi项目时,会自动编译该资源文件。

//RC: testBmp bitmap res\test.bmp
Image1.Picture.Bitmap.LoadFromResourceName(HInstance, 'res\test.bmp'); 

//RC: testBmp bmptype res\test.bmp

var

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

请注意上面两种调用方式的不一样之处。
相关文章
相关标签/搜索