13.對話方塊組件
96)問:怎樣編寫檔案開啟、儲存等對話方塊?
答:C++Builder為我們提供了許多常用的對話方塊組件,這些對話方塊組件都放在組件模板的Dialogs選項卡中,例如Font,Color,Open和Print對話方塊。其中OpenDialog對話方塊組件最具有代表性,只要掌握了它的用法,那麼你也就會使用其他的對話方塊組件了。
97)問:對話方塊組件的特性有哪些特性呢?
答:對話方塊組件是一種不可見組件。當你把它放在表單上時,它是一個大小不變的圖形按鈕,當程式運行時,對話方塊組件不會立刻顯示,而必須使用每個對話方塊都有的Execute方法,使對話方塊顯示出來。
C++Builder提供的對話方塊大多數是有強制回應對話方塊。這種對話方塊要求首先必須響應該對話方塊,然後才能繼續進行工作。所謂響應對話方塊就是你必須單擊OK或者Cancel按鈕,使對話方塊返回一個值。當使用者單擊對話方塊上的按鈕OK時,返回True,單擊Cancel按鈕返回False。使用者可以根據傳回值的不同進行不同的處理。
非強制回應對話方塊使你在響應對話方塊之前可以完成其他的工作,不必非要首先響應對話方塊。這類對話方塊有:FindDialog,ReplaceDialog等。
98)問:能更細點的說明對話方塊組件的用法嗎?
答:我們就編製一個文本閱讀器來說明如何使用檔案開啟對話方塊。
開啟一個新的表單,我們放上一個按鈕組件和一個Memo組件,將Memo的ScrollBars屬性設定為ssBoth,使得Memo能夠顯示垂直和水平的捲軸。
選中Lines屬性,刪除裡面的文本。
在表單上放置OpenDialog組件。
選中OpenDialog組件,可以看出,OpenDialog有這樣一些主要的特性
FilrerIndex屬性用來指定每次開啟對話方塊所用的預設過濾器。
DefaultExt屬性是一個副檔名,當使用者在檔案編輯框中輸入的檔案名稱沒有帶副檔名時,對話方塊會用它作為檔案預設的副檔名。
InitialDir屬性用來設定對話方塊開啟時顯示的目錄。
FileName屬性用來返回最近一次選中的檔案的完整路徑名。
Filter屬性,這個屬性用來設計在對話方塊的檔案清單中將列出哪些類型的檔案。
OpenDialog對話方塊提供了一個專門的編輯器來編輯屬性filter,單擊屬性Filter的value列中的省略好按鈕就可以開啟這個編輯器。
左邊用來輸入過濾器的名稱,右邊用來輸入副檔名。
現在,我們輸入文字檔和C++檔案的過濾器。這樣,在每次開啟對話方塊時候,在檔案類型下拉式清單中將顯示過濾器的名稱。
雙擊文開啟按鈕,輸入這樣一段代碼:
//------------------------------------------
#include <VCl.h>
#pragma hdrstop
#include "Unit1.h"
//------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//-----------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//-------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(OpenDialog1->Execute())//首先執行開啟檔案對話方塊函數,這時,開啟檔案對話方塊才顯示出來。如果執行成功,這個函數返回true,否則返回false
{
Memo1->Lines->Clear();//把Memo中的內容清掉
Caption=OpenDialog1->FileName; //獲得使用者選擇的檔案的路徑名,並將它設定成表單的標題。注意,因為是在Form1視窗(容器)中進行的操作,所以Caption前省了Form1,當然你可以加上Memo1->Lines->LoadFromFile(OpenDialog1->FileName);// 調用文本裝入函數從檔案中裝入文本,並顯示在編輯框中。
99)問:其它對話方塊的各有什麼重要屬性?
答:儲存對話方塊SaveDialog與開啟對話方塊非常相似,至於OpenPictureDialog、SavePictureDialog就不用多說了。其它象字型對話方塊FontDialog的Font屬性;顏色對話方塊ColorDialog的Color屬性;尋找對話方塊FindDialog的FindText。這裡就不用多說了,看一下就明白了。
100)問:對話方塊組難道就只能用上面說的那些組件嗎?要是有,能介紹一下嗎?
答:在C++ Builder整合式開發環境的可視化組件中庫中,給應用程式開發員提供了一系列的標準的對話方塊函數。我們可以直接調用這些函數來顯示一些標準的對話方塊。
這類函數還真不少,但我們只要掌握以下五個就足夠了J
extern PACKAGE int _fastcall MessageDlg(const AnsiString Msg,TmsgDlgType DlgType,TmsgDlgButtons Buttons,int HelpCtx):用來在電腦螢幕中央顯示對話方塊。
其中,參數Msg是指定要對話方塊中顯示的字串。
參數DlgType是TMsgDlgType類的變數,它用來指定對話方塊的顯示特徵。TmsgDlgType是一個集合,它可以取以下的值:
mtWarning:對話方塊中包含黃色的驚歎符號;
mtError:對話方塊中包含紅色的驚歎符號;
mtInformation:對話方塊中包含藍色的“I”符號;
mtConfirmation:對話方塊中包含綠色的問號;
mtCustom:對話方塊中不包含位元影像符號,標題名稱為應用程式名稱。
參數Buttons是用來指定對話方塊中包含的按鈕的類型,它是一個集合,可以是以下若干個元素的組合:
mbYes:對話方塊含有“Yes”按鈕;
mbNo :對話方塊含有“No”按鈕;
mbOK:對話方塊含有“OK”按鈕;
mbCancel :對話方塊含有“Cancel”按鈕;
mbAbort :對話方塊含有“Abort”按鈕;
mbRetry :對話方塊含有“Retry”按鈕;
mbIgnore :對話方塊含有“Ignore”按鈕;
mbAll :對話方塊含有“All”按鈕;
mbNoToAll :對話方塊含有“NoToAll”按鈕;
mbYesToAll :對話方塊含有“YesToAll”按鈕;
mbHelp :對話方塊含有“Help”按鈕.
C++ Builder還專門定義了三個常用的按鈕組合:
mbYesNoCancel:包含了mbYes、mbNo和mbCancel元素;
mbOKCancel:包含了mbOK和mbCancel元素;
mbAbortRetryIgnore:包含了mbAbort、mbRetry和mbIgnore元素。
參數HelpCtx用來指定當使用者選擇協助時,協助系統中的上下文編號。這個函數根據使用者選擇的按鈕,將返回相應的值,它有以下傳回值:mrNone、mrAbort、mrOK、mrRetry、mrNo、mrCancel、mrIgnore、mrAll。
extern PACKAGE void _fastcall ShowMessage(const AnsiString Msg):這個函數用來顯示一個對話方塊,這個對話方塊中包含一個“OK”按鈕。其中對話方塊中顯示的內容由參數Msg來確定。
extern PACKAGE AnsiString _fastcall InputBox(const AnsiString Acaption, const AnsiString Aprompt, const AnsiString Adefault):這個函數用來在電腦螢幕上顯示一個對話方塊,這個對話方塊有一個文本編輯框,可以用來接收使用者輸入的字串資訊。
Acaption:用來指定對話方塊的標題;
Aprompt:用來指定對話方塊中顯示的內容;
Adefault:用來指定對話方塊開啟時在編輯框中顯示的內容。
extern PACKAGE bool _fastcall LoginDialog(const AnsiString Acaption, AnsiString &AuserName, AnsiString &AuserName):這個函數用來顯示一個標準的登入對話方塊,用來串連一個資料庫伺服器,其參數分別為對話方塊中資料庫的名字、使用者輸入的使用者名稱和密碼。
extern PACKAGE bool _fastcall SelectDirectory(const AnsiString Caption,const WideString Root,AnsiString &Directory)或extern PACKAGE bool _fastcall SelectDirectory(AnsiString &Directory,TselectDirOpts Options,int HelpCtx):這個函數用來顯示一個讓使用者輸入目錄名稱的對話方塊。其中:
第一種文法的參數Caption用來指定對話方塊的標題;Root用來指定從哪個根目錄開始瀏覽;參數Dircetory用來確定使用者選擇的目錄。這個文法不能改變當前的目錄。
第二種文法的參數Options是一個集合,它可以由以下幾個元素組合而成:
sdAllowCreate:允許使用者輸入一個不存在的目錄名字,但並不建立這個新目錄;
sdPerformCreate:它必須和sdAllowCreate配合使用,當使用者輸入一個不存在的目錄名時,對話方塊將建立這個目錄;
sdPrompt:它必須和sdAllowCreate配合使用,當使用者輸入一個不存在的目錄名時,將出現訊息對話方塊,詢問使用者是否建立這個新目錄。若使用者選擇是,在包含sdPerformCreate元素時將建立這個新目錄,若沒有包含sdPerformCreate元素,將不建立目錄。
《基礎入門》100問答到這就結束了,本文所有常式均在XP系統、BCB6下編譯通過。
(本系列還未結束,請繼續關注)