天天看點

C++ Builder 初學問與答(十二)

13.對話框元件

96)問:怎樣編寫檔案打開、儲存等對話框?

  答:C++Builder為我們提供了許多常用的對話框元件,這些對話框元件都放在元件模闆的Dialogs頁籤中,例如Font,Color,Open和Print對話框。其中OpenDialog對話框元件最具有代表性,隻要掌握了它的用法,那麼你也就會使用其他的對話框元件了。

  97)問:對話框元件的特性有哪些特性呢?

  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

  其中,參數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 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元素,将不建立目錄。

本文轉自yonghu86 51CTO部落格,原文連結:http://blog.51cto.com/yonghu/1321411,如需轉載請自行聯系原作者

繼續閱讀