程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 談Delphi編程中資源文件的應用

談Delphi編程中資源文件的應用

編輯:Delphi

談Delphi編程中資源文件的應用

  <<電腦商情�>>稿件                                        談Delphi編程中資源文件的應用
                                                                     陳經�
(一)初級應用�:
  資源文件一般為擴展名為res的文�.在VC中資源文件用得非常普�,但Delphi在其聯機幫助中對資源文件沒作什麼介�,其實利用其自帶的資源編譯工具BRCC32.EXE(一般位於DelphiBIN目錄下),我們完全可以做出跟VC一樣效果的文件來�
  資源文件最大的好處是能將一些在必要時才調用的文件跟可執行文件一起編�,生成一個文�.這樣做最大的好處就是使外部文件免遭破�.例如在一條程序中你要臨時調用一幅圖�,一般作法是把圖片放在某一路徑下(通常是主程序所在路徑),但如果用戶路徑誤刪你的圖片文�,則可能使程序找不到相應文件而出錯崩�.另外,如果你想自己的程序界面美觀,想用一些自定義光標,也要用到資源文件�
  資源文件的使用步驟為�
1.編寫rc腳本文本
用記事本或其它文本編輯器編寫一個擴展名為rc的文件。例如:

mycur cursor move.cur //加入光標
mypic Bitmap Water.BMP //加入位圖
mywav WAVE happy.wav //加入聲音
myAVI AVI EPOEN.AVI //加入視頻
myIco ICON CJT.ICO //加入圖標

  格式分別為在資源文件中的名稱->類型->實際文件名稱,例如上面第一行定義一個名為mycur的光標,實際名稱為加入光標move.cur.
2.將rc文件編譯成res資源文件
  將腳本文件和實際文件拷到Brcc32.EXE所在目錄,執行DOS命令。格式為:Brcc32 腳本文件(回車),例如有一名為myfirst.rc的腳本文件,則執� Brcc32 myfirst.rc(回車)即可。如果你是懶人,也可新建一批處理文件,內容只有一行:Brcc32 mufist.rc.(因為Delphi安裝後一般會在自動批處理文件中指明搜索路徑的�)如果編譯成功,則會生成一個結尾為res的文件,這個文件就是我們需要的資源文件�
3.在Delphi單元中加入資源文�
  將生成的res資源文件拷貝到你所編程序的路徑下,在單元文件{$R *DFM}後加上一句{$R mufirst.res},則將res文件加入去,編譯後資 源文件即已包含在可執行文件中了。若你有多個資源文件,也按上法依次加入�
4.在Delphi程序中調用資源文�
  資源文件在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�!我曾下載過一個播放器,在其安裝目錄下我發現有一"DOS程序",用鼠標雙擊它便彈出一個DOS窗口,顯示DOS時代特有的畫圖,並有背景音樂!可能就是用這個方法做的�
3.Delphi本身自帶了一個叫Image Editor的工具,同樣可以編輯資源文本,但和本文的方法比較,可得出下表�

**************************************
Image Editor Brcc32

BMP 只支�16位色 任意�

光標 黑白兩色 任意�

ICO 只支�16位色 任意�

AVI 不支� 支持

WAV 不支� 支持

字體 
字符� 不支� 支持
其他 
****************************************

  上面說的是直接在程序本身的調用。其實資源文件還有其它用法。比如說在你的程序攜帶其它文件,要用的時候釋放出來�
例如: myexe exefile ha1.exe//腳本文件
下面是自定義釋放函數ExtractRes,本例中使用如下:
ExtractRes(exefile,myexe,c: ew.exe);
就把ha1.exe以new.exe為名字保存到C盤根目錄下了. 

function TForm1.ExtractRes(ResType, ResName, ResNewName: string): boolean;
var
Res: TResourceStream;
begin
try
Res := TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
try
Res.SavetoFile(ResNewName);
Result := true;
finally
Res.Free;
end;
except
Result := false;
end;
-----------------------------------

  1. 上一�:
  2. 下一�:
Copyright © 程式師世� All Rights Reserved