作用
Delphi的每個主程式中都含有{$R *.RES}指示字,表示載入與程式同名資源檔案中存放的程式圖示。巧妙地利用資源檔案對於編程有意想不到的作用。
檔案的生成
RES檔案是由RC檔案編譯而來的,請看以下RC檔案示例:
文本檔案“MyMusic.RC”:
SRC1 FILE1 OnlyYou.mp3
SRC2 FILE2 YesterdayOnceMore.mp3
SRC3 FILE3 MoonRiver.mp3
//另例:
//mycur cursor move.cur //加入游標
//mypic Bitmap Water.BMP //加入點陣圖
//mywav WAVE happy.wav //加入聲音
//myAVI AVI EPOEN.AVI //加入視頻
//myIco ICON CJT.ICO //加入圖示
其中,每一行表示聲明一項資源,每一項資源的聲明包含三個參數定義,第一個參數是資源的名稱,第二個參數是資源的類型描述(本例定義了三類),第三個參數是檔案名稱。參數之間必須由空格隔開。
編寫完成“MyMusic.RC”檔案後,將其與上述三個.MP3檔案放置在同一資料夾中(為了避免由設定路徑帶來的麻煩)。然後以下面的命令行運行應用程式brcc32.exe(位於..\Delphi6\Bin):brcc32 mymusic.rc需要注意的是,該命令只能在命令行方式下執行;mymusic.rc與brcc32不在統一目錄下,寫brcc32 檔案路徑\mymusic.rc。如果系統的PATH環境變數中不包含Delphi的運行路徑,那么你還需要將brcc32.exe與MyMusic.RC、三個.MP3檔案放置在同一路徑中進行。運行上述命令行後,將在同一路徑中得到檔案“MyMusic.RES”,這就是一個獨立完整的資源檔案。
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');
值得一提的是,利用此方法,你完全可以製作自己的安裝程式,該安裝程式僅包含一個執行檔,在該執行檔中以資源的形式包含所有將要安裝的內容(檔案)。此外,如果在你的應用程式中需要播放外部音頻檔案(如背景音樂、聲音提示等),也可通過此方法將這些外部檔案包含到應用程式中,從而避免用戶誤刪這些音頻檔案導致應用程式的不完整。
RES檔案的調用
資源檔案在Delphi中的關鍵字為hinstance.下面給出具體用法.
<1>游標的調用
首先在程式中定義一個值大於0的常量,因為Delphi本身用0-負16來索引默認
的游標,所以我們制定的游標應從表面上1開始索引。然後在視窗的Oncreat事件
中添加以下代碼:
screen.cursor[35]:=Loadcursor (hinstance,'mycur');
其中35為大於1的常量,mycur為游標在資源檔案中的名字。如果希望在其他控
件上使用定製游標,例如Panel控制項,只需在程式的適當處加入以下代碼:
Panel1.cursor:=35;
<2>點陣圖的調用
新建一項工程,添加一Timage控制項,在需要顯示的地方寫以下代碼:
Var mymap:Hbitmap;
begin
mymap:=LoadBitmap(hinstance,'mypic');
Image1.picture.Bitmap.Handle:=mymap;
end;
其中"mypic"為點陣圖資源檔案中的名稱。
〈3〉AVI檔案的調用
新建一工程,添加一Animate控制項,在需要的地方加入:
animater1.resname:="myAVI";
animater1.Active:=true;
其中myAVI為視頻檔案在資源檔案中的名稱。
〈4〉調用WAV檔案
在uses中加入mmsystm單元,以便在程式中播放WAV檔案。播放時
Playsound(pchar('mywav'),hinstance,sndsync or snd_resource);
其中mywav為聲音檔案在資源中的名稱。
〈5〉加入游標
加入游標比較容易,只要將res檔案加入單元檔案中即可。但需注意,名稱最好
取"W"."WW"等,使第一個字母儘量靠後,以免與主程式的圖示順序顛倒。這樣一
來,別人在使用你的程式時如果想選擇其它圖示就有很多選擇了。
補充:
1.資源類型除上述類型外,還可以字型檔,字元串檔案等。
2.資源檔案不但可以在標準圖形界面下使用還可在控制台下使用。
下面我們來試驗一下:
新建一工程,將唯一的一個Form刪除,然後修改工程檔案。增加一句{$Apptype console},在uses子句中加入mmsystem,並將其它引用單元刪掉。將Begin和end之間語句刪掉。至此,我們就可和Turbo PASCAL下編程式一樣,且還可以調用windows的API和資源。將資源檔案----{$R myfist.res}加入。在Begin和end之間寫下:
writeln('演示程式,按任意鍵開始!');
readln;
playsound(pchar('mywav'),hinstance,snd_sync or snd_resource);
writeln('演示結束!');
運行程式,將彈出一個標準DOS視窗,按任意鍵播放聲音檔案。是不是很COOL呢!
品牌介紹
銳易特軟體
RES是realesoft的縮寫,代表創新、實用、貼近客戶,真正為客戶創造價值。
RES Infomatic品牌的套用集成中間件套件由企業服務匯流排(ESB)、服務資源註冊中心(Registry and Repository)、企業套用門戶(Portal)、SOA企業套用平台(SOA Platform) 四大支柱產品家族組成。