天天看點

Delphi中巧妙利用RES檔案

在Delphi項目中,通常有一個和項目名稱主檔案名相同的.RES檔案,該檔案用于儲存應用程式圖示等資源,對應于此檔案,在項目檔案中一定含有編譯訓示“{$R *.res}”,告訴編譯器編譯時需要包含和項目主檔案名相同的.RES檔案。同樣,如果需要在應用程式中以資源形式包含所有檔案類型,也能利用.RES檔案。本文将告訴你怎麼利用RES檔案在Delphi程式内部包含檔案。

一建立.RES檔案

這裡以一組音頻檔案為例。首先用記事本等所有文本編輯器編寫檔案“MyMusic.RC”。檔案的格式及内容如下:

SRC1 FILE1 OnlyYou.mp3

SRC2 FILE2 YesterdayOnceMore.mp3

SRC3 FILE3 MoonRiver.mp3

其中,每一行表示聲明一項資源,每一項資源的聲明包含三個參數定義,第一個參數是資源的名稱,第二個參數是資源的類型描述(本例定義了三類),第三個參數是檔案名。參數之間必須由空格隔開。

編寫完成“MyMusic.RC”檔案後,将其和上述三個.MP3檔案放置在同一目錄中(為了避免由設定路徑帶來的麻煩)。然後以下面的指令行運作應用程式brcc32.exe(位于..\Delphi6\Bin):brcc32 mymusic.rc需要注意的是,該指令隻能在指令行方式下執行。如果系統的PATH環境變量中不包含Delphi的運作路徑,那麼你還需要将brcc32.exe和MyMusic.RC、三個.MP3檔案放置在同一路徑中進行。運作上述指令行後,将在同一路徑中得到檔案“MyMusic.RES”,這就是個獨立完整的資源檔案,其格式是遵循視窗系統 标準的,是以能在諸如VB、VC、CBuilder等多種研發環境中使用。

二在程式中聲明包含.RES檔案

你隻需要在項目中的某個單元中(最佳是你需要利用這些資源的單元,這樣會使你的應用程式更具有可讀性)加入如下編譯訓示:

$R MyMusic.RES}

{

盡管該編譯訓示能位于單元的所有位置,但為了使你的原始碼結構合理,最佳還是将其并列位于編譯訓示“{$R *.dfm}”(每個含有窗體檔案的單元中都含有該行編譯訓示)。這裡的編譯訓示就明确告訴編譯器,在編譯應用程式時需要将資源檔案“MyMusic.RES”包含到應用程式中。

三在運作時擷取資源

上述兩步工作僅僅是基礎(但一定是必要的),利用資源才是根本目的。下面的過程将告訴你怎麼将應用程式中包含的資源(檔案)重新還原。

procedure MusicResToFile(const ResName, ResType,FileName: string);

var

Res: TResourceStream;

begin

Res := TResourceStream.Create(HInstance,ResName, PChar(ResType));

Res.SaveToFile(FileName); //将資源儲存為檔案,即還原檔案

//你還能進行其他的流操作,在記憶體中實作對資源利用而不必另存為檔案

Res.Free;

end;

調用該過程的示例如:

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

值得一提的是,利用此方法,你完萬能制作自己的安裝程式,該安裝程式僅包含一個可執行檔案,在該可執行檔案中以資源的形式包含所有将要安裝的内容(檔案)。此外,如果在你的應用程式中需要播放外部音頻檔案(如背景音樂、聲音提示等),也可通過此方法将這些外部檔案包含到應用程式中,進而避免使用者誤删這些音頻檔案導緻應用程式的不完整。