天天看點

Delphi 資源檔案( .res)

一.    現在的Windows應用程式幾乎都使用圖示、圖檔、光标、聲音等,我們稱它們為資源(Resource)。最簡單的使用資源的辦法是把這些資源的源檔案打入軟體包,以友善程式需要的時候調用。資源是程式的一部分,程式要正常運作就離不了資源檔案。但是它是不可執行代碼。

     為了更好地管理資源,Delphi中提供了一種.RES類型的資源檔案。它可以把我們程式中所需要的資源整合到一個資源檔案(.RES)下來。在編譯應用程式時直接編譯進了可執行程式裡,成為應用程式的整合體。

     這樣做的好處是:

1。由于定位資源比在磁盤中定位檔案花費時間少,是以應用程式執行會更快。

2。多種資源可以放在一個檔案中,減少了圖示、圖檔、光标、聲音等檔案數量。不用怕使用者在使用過程中的不小心而損壞了資源檔案緻使程式無法正常運作。缺點是:因為資源檔案的加入進而加大了編譯出的可執行程式的位元組數,當資源檔案較大時會使應用程式變得看起來雍腫。

     使用資源檔案的優點很顯著,其缺點也很突出。是以在實際應用中就要根據情況權衡利弊、靈活使用,這已不在本文的讨論之列。下面僅就Delphi系統程式設計中對于資源檔案的使用方法做一個大緻的總結。

二、建立資源檔案:

    注意事項:建立的資源檔案名不要和工程名相同,因為Delphi建立工程時會自動建立一個和工程名相同的資源檔案。并且最好将資源檔案儲存到和工程檔案同一個檔案夾中。

    1.首先建立一個.Rc的純文字檔案。格式如下:

          資源辨別符  關鍵字  資源檔案名

    格式說明:

    ① 資源辨別符:程式中調用資源時的特定标号;

    ② 關鍵字:辨別資源檔案類型;例如:

        Wave  : 資源檔案是聲音檔案;

        RCDATA: JPEG檔案;

        AVI   : AVI動畫;

        ICON  : 圖示檔案;

        BITMAP: 位圖檔案;

        CURSOR: 光标檔案;

        RMI   : RMI音樂檔案;

        MIDI  : MIDI音樂檔案

    ③ 資源檔案名:加入的資源檔案名(要帶擴充名,可以帶路徑名構成全檔案名);

    ④ 舉例:  

                 MyWav WAVE "FileName.Wav"                  MyMID MIDI "C:/My Documents/my music/canyon.MID"                  MyAVI AVI  "SpeedIs.AVI"

     例中資源檔案名可以不加引号。假設我們把上述三行儲存成Sample.RC檔案。

    2。使用Borland資源編譯器(BRCC32.EXE)轉化.Rc檔案成.Res檔案。

    在DOS指令行下輸入下列指令:

    C:                                     //轉在C:驅

    CD/                                     //退回根目錄

    CD/Program Files/Borland/Delphi7/Bin    //進入BRCC32.EXE的所在目錄

    Brcc32 Sample.Rc                        //把Sample.RC轉換成資源檔案Sample.RES

    注意轉換前需要把Sample.RC檔案中指定的未帶全路徑名的檔案Copy進目前目錄C:/Program Files/Borland/Delphi7/Bin中來,才可保證轉成.RES檔案不出錯。如果轉換過程沒有報錯,則成功。

三、引用資源檔案

    把上一步驟生成的資源檔案Sample.RES放到要建立的工程的同一個目錄中來。

    為了存取我們的資源檔案,必須告訴Delphi連結我們的資源檔案到應用程式中。是以要在源代碼中加入一條編譯指令完成上述功能。這條指令必須緊跟在視窗指令後,如下形式:

    {$R *.DFM}                             //Delphi自帶編譯指令

    {$R Sample.RES}                       //新加入的編譯資源檔案的指令

    不要删除{$R *.DFM}指令,因為這行代碼告訴Delphi連結下面的資源到視窗的資源中。

四、調用資源檔案

    1。存取資源檔案中的位圖(Bitmap)

    程式中如果想存取資源,必須調用一些Windows API函數。儲存在資源檔案中的位圖、光标和圖示可以通過調用LoadBitmap、LoadCursor和LoadIcon函數存取。

    現舉例說明如何存取資源檔案中位圖并顯示在Timage控件中。

     注:如果位圖沒有裝載成功,程式仍舊執行,但是Image将不再顯示圖檔。可以根據LoadBitmap 函數的傳回值判斷是否裝載成功,如果裝載成功傳回值是非0,如果裝載失敗傳回值是0。

    另外一個存取顯示位圖的方法如下:

    2。存取資源檔案中的光标

    Screen.Cursors[]是一個光标數組,使用光标檔案我們可以将定制的光标加入到這個屬性中。因為預設的光标在數組中索引值是0,是以除非想取代預設光标,最好将定制的光标索引值設為1。

    3。存取資源檔案中的圖示

    将圖示放在資源檔案中,可以實作動态改變應用程式圖示。

    4。存取資源檔案中的AVI

    在工程中添加一TAnimate控件(在Win32控件面闆上),在需要的地方加入:

     實踐中的一點總結:并不是所有的AVI資源都可以用TAnimate元件來播放,編定程式時要測試。遇到不能用TAnimate元件來播放的AVI資源,則可以把它從資源檔案裡分離出來,再使用相應的播放元件比如TMediaPlayer來播放。使用完再把分離出來的臨時檔案删除掉。可以參考後面 “7。”的說明。

    5。存取資源檔案中的JPEG

    把jpeg單元加入到Interface的uses中。

    6。存取資源檔案中的Wave

    把MMSystem加入到Interface的uses中

     實踐中的一點結論:PlaySound()的參數Snd_ASync表示異步播放方式,Snd_Sync表示同步播放方式。(1)當采用異步方式的時候,WAV資源可以作為背景音樂來應用;但是當有連續多次異步調用的時候,則可能會丢棄最後一次調用之前的所有播放,使用者得到的效果隻是最後一次調用的聲音。(2)當采用同步方式的時候,WAV資源會獨占資源,導緻WAV檔案未播放完之前使用者無法對應用程式進行任何操作,直至它的調用結束。是以如果有大的同步WAV資源時,會造成應用程式界面的停滞。但是這種方式卻可以連續地一個不漏地執行多次調用。

    7。其他資源的調用:

    可以把資源檔案中的源檔案分離出來,建立一個臨時的實體檔案存在于應用程式路徑下,然後可以用相應類型的元件來或方法來使用該檔案。當程式退出時再不忘把該臨時檔案删除掉。

    例如:

程式退出的時候删除:

一個利用res将檔案還原的事例 

  先用記事本等任何文本編輯器編寫檔案“MyMusic.RC”。檔案的格式及内容如下: 

  SRC1   FILE1   a.mp3 

  SRC2   FILE2   b.mp3 

  SRC3   FILE3   c.mp3 

      注意:以上三檔案最好與   MyMusic.RC放在同一目錄下。 

      然後,在開始菜單“運作”中運作brcc32   d;/resmp3/mymusic.rc 

      生成mymusic.res檔案 

      在你需要利用這些資源的單元中加入如下編譯訓示: 

   調用: 

        MusicResToFile('SRC2',   'FILE2',   'TheSecondMusic.MP3');

五、結束語

    位圖、光标和圖示、AVI動畫、JPEG和Wave檔案等可以放到資源檔案中。上面我們介紹了如何将資源加入到資源檔案中,并介紹了在Delphi中動态存取資源檔案的方法。Delphi編譯工程會自動建立一個和工程名相同的資源檔案(如果沒有其他的資源,主視窗的圖示會放在這個資源檔案中)。但是建議最好不要改變這個資源檔案。

繼續閱讀