應(yīng)用程序在運(yùn)行當(dāng)中經(jīng)常要輸出各種即時(shí)信息,Delphi提供了多種形式的消息對(duì)話(huà)框可以滿(mǎn)足這些要求,盡管可以使用各種標(biāo)志定制一個(gè)消息框,但仍不能將自己的圖標(biāo)放在消息框內(nèi),也不能修改其標(biāo)準(zhǔn)行為去創(chuàng)建自己的消息框,其實(shí)通過(guò)調(diào)用函數(shù)MessageBoxIndirect()就很容易繞過(guò)這些明確的限制,這是一個(gè)功能很強(qiáng)、易于使用的函數(shù)。
---- 此函數(shù)在WINDOWS單元里面,文件位于Delphi安裝路徑Source\Rtl\Win里面,需要指出的是,Delphi的原代碼中它的返回值類(lèi)型是BOOL型,而實(shí)質(zhì)上它的返回值應(yīng)為Integer。修改方法:在WINDOWS單元中找到此函數(shù)后,把BOOL改為Integer,共有三處要修改,然后在Delphi安裝路徑Lib中找到WINDOWS.DCU文件,把它改名或者刪除,并把修改后的WINDOWS.PAS源碼復(fù)制到Lib路徑中。
---- 該函數(shù)只有一個(gè)參數(shù),類(lèi)型是TMsgBoxParams,它的結(jié)構(gòu)及說(shuō)明如下:
tagMSGBOXPARAMSA = packed record cbSize: UINT; {數(shù)據(jù)結(jié)構(gòu)的長(zhǎng)度} hwndOwner: HWND; {所有者窗口句柄} hInstance: HINST; {應(yīng)用程序?qū)嵗浔?#125; lpszText: PAnsiChar; {在消息框客戶(hù)區(qū)內(nèi)顯示的文本} lpszCaption: PAnsiChar; {標(biāo)題欄文本} dwStyle: DWORD; {確定消息框內(nèi)按鈕和圖符 的數(shù)量及種類(lèi)的MB_標(biāo)志} lpszIcon: PAnsiChar; {從資源文件中取出的一個(gè) 圖符資源的名字} dwContextHelpId: DWORD; {指定幫助文本的ID號(hào)} lpfnMsgBoxCallback: TPRMsgBoxCallback; {當(dāng)用戶(hù)按下HELP按鈕時(shí)調(diào)用的一個(gè)回 調(diào)函數(shù)} dwLanguageId: DWORD; {顯示在按鈕內(nèi)文本的語(yǔ)言定義} end;
---- 由于直接使用此函數(shù)比較復(fù)雜,我們可以自定義一個(gè)函數(shù)來(lái)封裝此函數(shù),對(duì)它進(jìn)行簡(jiǎn)化,在用法上盡量做到與Delphi的消息框相一致,自定義函數(shù)代碼如下: function MessageEx (lText,lCaption:PChar; lStyle:DWord;lIcon:PChar):Integer; var Msg:TMsgBoxParams; begin Msg.cbSize:=Sizeof(Msg); Msg.hwndOwner:=Application.Handle; Msg.hInstance:=hinstance; Msg.lpszText:=lText; Msg.lpszCaption:=lCaption; Msg.dwStyle:=lStyle; Msg.lpszIcon:=lIcon; Msg.dwContextHelpId:=1; Msg.lpfnMsgBoxCallback:=nil; Msg.dwLanguageId:=LANG_NEUTRAL; Result:=MessageBoxIndirect(Msg); end;
---- 要想在消息框中顯示自己的圖標(biāo),先準(zhǔn)備一個(gè)裝有圖標(biāo)的資源文件,加在程序中,如{$R c:\mydir\myres.res},在lStyle參數(shù)里除了所需的MB_標(biāo)志外還要加上MB_USERICON標(biāo)志,并在最后一個(gè)參數(shù)里寫(xiě)上資源文件中圖標(biāo)的名字,如果不想使用自定義的圖標(biāo),可將最后一個(gè)參數(shù)設(shè)為nil。函數(shù)的其它用法和返回值的處理與Delphi提供的消息框一樣。 ---- 強(qiáng)烈建議把自定義函數(shù)放在一個(gè)單元文件里,并把此文件放在Delphi的搜索路徑如Lib下,以后只需要把此單元加在uses語(yǔ)句里,就可以直接使用自定義函數(shù),非常方便。
---- 上述自定義函數(shù)在Delphi4、Delphi5里運(yùn)行通過(guò)。
|
溫馨提示:喜歡本站的話(huà),請(qǐng)收藏一下本站!