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;

請注意上面兩種調用方式的不一樣之處。
相關文章
相關標籤/搜索