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

來源:互聯網
上載者:User

 

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下編譯通過。

(本系列還未結束,請繼續關注)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.