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

amyz發表於2007-11-25
C++ Builder 初學問與答 (十二) (轉)[@more@]

(本系列文章,僅供CSDN使用,另授權CCRUN轉載,其他個人與網站不得轉載、摘抄,如需使用請與作者或CSDN聯絡)

 

  96)問:怎樣編寫開啟、儲存等對話方塊?

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

 :namespace prefix = o ns = "urn:schemas--com::office" />

  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

#pragma hdrstop

 

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma re "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

  : TForm(Owner)

{

}

//---------------------------------------------------------------------------

 

void __fastcall TForm1::Button1Click(T *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 Directory(const AnsiString Caption,const WString ,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問與答到這就結束了,由於原文是在下寫的,帖到這裡時有時會出現一些錯誤,由此給編輯帶來很多不必要的勞動,所以要感謝編輯的辛苦工作!J

注:本文所有例程均在XP系統、BCB6下編譯透過。

 

(全文未完)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-984510/,如需轉載,請註明出處,否則將追究法律責任。

相關文章