13.對話框組件 96)問:怎樣編寫文件打開、保存等對話框?
<!-- frame contents -->
<!-- /frame contents -->
答: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/C++技術專題專題,或
現在,我們輸入文本文件和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);// 調用文本裝入函數從文件中裝入文本,並顯示在編輯框中。
更多內容請看C/C++技術專題專題,或
} } //-------------------------------------------------- 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”按鈕;
更多內容請看C/C++技術專題專題,或
mbIgnore :對話框含有“Ignore”按鈕; mbAll :對話框含有“All”按鈕; mbNoToAll :對話框含有“NoToAll”按鈕; mbYesToAll :對話框含有“YesToAll”按鈕; mbHelp :對話框含有“Help”按鈕.
<!-- frame contents -->
<!-- /frame contents -->
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):這個函數用來顯示一個標准的登錄對話框,用來連接一個數據庫服務器,其參數分別為對話框中數據庫的名字、用戶輸入的用戶名和密碼。
更多內容請看C/C++技術專題專題,或
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下編譯通過。(本系列還未結束,請繼續關注)
更多內容請看C/C++技術專題專題,或