res[Windows程式資源檔案]

res[Windows程式資源檔案]
res[Windows程式資源檔案]
更多義項 ▼ 收起列表 ▲

RES檔案在Windows編程中被稱為資源檔案,用於存放字元串、程式圖示、其他引用圖片。

作用

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) 四大支柱產品家族組成。

相關詞條

相關搜尋

熱門詞條

聯絡我們