3. 按鈕類組件
21)問:在進行Windows程序界面設計中,經常會用到按鈕,在C++Builder中,按鈕一定是通過按鈕組件來實現的嗎?
<!-- frame contents -->
<!-- /frame contents -->
答:是的,並且C++Builder的按鈕類組件十分豐富。BCB提供了兩類按鈕類組件:一類是執行類按鈕,另一類是信息類按鈕。所謂執行類按鈕是指它們通常用來啟動程序運行的,比如按鈕、位圖按鈕、加速按鈕。而信息類按鈕一般用來獲取信息,包括單選按鈕和復選框。靈活地使用各種按鈕,不僅可以使程序更加豐富多彩,而且可以提高程序的性能。
22)問:那麼按鈕組件有哪些常用的屬性和方法呢?
答:對於按鈕組件,Caption屬性用來描述按鈕的標題,也就是按鈕上顯示的文本,它與標簽組件很相識,我們同樣可以在這個屬性中為按鈕指定快捷鍵。
當Cancel屬性值為True時,用戶無論何時按下Esc鍵,都會產生OnClick事件,當窗體上有多個按鈕時,Esc鍵觸發TabOrder值最小的那個按鈕的OnClick事件。它的缺省值為False
當Default屬性值為true時,用戶無論何時按下Enter鍵時,都會產生OnClick事件,與Cancel屬性不同的是,假如輸入焦點正好在一個按鈕上,那麼會產生這個按鈕的OnClick事件。否則,產生TabOrder的值最小的那個按鈕的OnClick事件。它的缺省值為True
Hint屬性保存著按鈕的提示內容,當用戶把鼠標光標停留在按鈕上時,就會顯示提示信息。
ShowHint屬性用來確定是否顯示提示文本,缺省值為False。
按鈕常用的事件就是OnClick事件,OnClick事件在鼠標單擊按鈕時產生,另外,通過快捷鍵、enter鍵和Esc鍵也可以產生OnClick事件,一般情況下,按鈕都需要增加OnClick事件處理程序。
23)問:那麼位圖按鈕又有什麼特點呢?
答:位圖按鈕BitBTn除了可以像普通按鈕那樣顯示文本外,還可以顯示圖形,除了具有一般按鈕所具有的全部屬性外,位圖按鈕還有一個特有的Kind屬性。這個屬性用來設定按鈕為幾種預定義圖形按鈕風格中的哪一種。這是幾種預定義按鈕風格。這些做好的按鈕如下表:
Kind屬性值按鈕外觀等價屬性設置bkCustom<?XML:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
缺省值用來給用戶制定bkOK
Caption=”OK”ModalResult=mrOKDefault=truebkCancel
Caption=”Cancel”ModalResult=mrCancelCancel=truebkYes
Caption=”&Yes”ModalResult=mrYesDefault=truebkNo
Caption=”&No”ModalResult=mrNoCancel=truebkHelp
Caption=”&Help”bkClose
Caption=”&Close”bkAbort
Caption=”Abort”ModalResult=mrAbortbkRetry
Caption=”&Retry”ModalResult=mrRetrybkIgnore
Caption=”&Ignore”ModalResult=mrIgnorebkAll
Caption=”&All”ModalResult=mrAll
更多內容請看C/C++技術專題專題,或
當把Kind的屬性值設置為bkCustom時,還可以給位圖按鈕指定其他的圖形,具體的方法是,在對象編輯器中選擇Glyph屬性,然後單擊Value列中的省略號按鈕,這時會出現一個圖形編輯對話框,要求指定位圖的位置。
<!-- frame contents -->
<!-- /frame contents -->
單擊Load按鈕,在文件打開對話框中選擇一個位圖文件就可以了。要注重的是,假如選擇的位圖太大,位圖按鈕不會自動調整其尺寸,這時你只能看到一部分的圖形。
24)問:位圖按鈕組件的NumGlyph屬性有什麼作用?
答:屬性NumGlyph指出位圖按鈕使用的位圖的數目,當你需要位圖按鈕使用多個位圖分別表示按下,彈起等不同狀態時,必須保證這些位圖具有相同的尺寸,並且一個接著一個地水平排列著。
在C++Builder中,一個位圖按鈕最多可有四個位圖,因此,NumGraph地取值范圍只能是1到4,C++Builder將根據位圖按鈕地狀態確定顯示哪個位圖。
一般來說,當按鈕未選中時顯示第一個位圖。
當按鈕不能選擇時,顯示第二個位圖,
當按鈕被單擊時顯示第三個位圖,
當用戶釋放鼠標鍵時,又會重新顯示第一個位圖,
當沒有希望的位圖時,那麼所有地狀態都使用第一個位圖。
25)問:快捷按鈕有哪幾個重要屬性?
答:快捷按鈕與位圖按鈕很相似,也可以顯示圖像,但也有一些不同之處:快捷按鈕一般都比較小,缺省大小25*25,基本上都是只顯示圖像而不顯示文字,最大差別是,快捷可以保持在按下的狀態,而其它兩類按鈕不能。快捷按鈕一般都是用來制作工具欄按鈕,這時要和Panel配合使用。下面來看一下它的重要屬性:
AllowAllUp:設置一個組的快捷按鈕是否可以全部處於彈起的狀態。缺省為false,這時可以用來模擬單選按鈕,讓同一個組的總有一個按鈕處在按下狀態。假如一個組中只有一個快捷按鈕,把這個屬性改為true,這時這個按鈕就可以在按下和彈起兩個狀態之間切換,可以用來模擬一個復選按鈕。
Down:表示按鈕是否按下,若設為true,則處於按下的狀態。
GroupIndex:用來把幾個這個屬性相同的快捷按鈕編為一組,即相同取值的按鈕為一組。缺省為0,表示這個按鈕不編成組。
26)問:那麼單選按鈕又有什麼特點呢?
答:單選按鈕RadioButton是相互排斥的一種選擇組件,在一組單選按鈕中用戶一次只能選取一個單選按鈕。
雖然你可以只使用一個單選按鈕,但是那樣單選按鈕也就失去了意義。單選按鈕一般都是成組出現的。
單選按鈕只有一個比較非凡的屬性Checked,它表示按鈕是否被選中。缺省情況下,Checked的屬性是False,表示按鈕未選中。
另外單選按鈕也具備Caption屬性,這就意味著它也可以通過快捷鍵來選中。
單選按鈕在成組使用時有一些特點需要把握。當你在同一容器(如:Form、Panel、GroupBox等)上直接放置單選按鈕時,這些單選按鈕自成一組,也就是說,無論在容器上放置2個或者幾十個單選按鈕,它們都是一組的,每次只能選中它們中的某一個。
更多內容請看C/C++技術專題專題,或
27)問:假如我想在窗體上放置不止一組按鈕,應該怎麼辦?
答:可以用兩種方法。一種是使用組合框(GroupBox),另一種是使用單選按鈕分組框(RadioGroup)。
<!-- frame contents -->
<!-- /frame contents -->
組合框顧名思義就是用來把許多組件組合起來,使窗口變得整潔而有條理,每一組不同的按鈕使用一個組合框。在設計時,首先把組合框放在窗體上,然後再把單選按鈕放在分組框上。要記住的是,放置次序不能顛倒。一旦把單選按鈕放在分組框中,那麼這個單選按鈕就屬於這個組合框了,你無法把它從組合框中移走,假如刪除組合框的話,分組框中所有的單選按鈕也會被同時刪除。
在實際應用中,我們經常使用單選按鈕分組框而不是單選按鈕。因為單選按鈕分組框可以包含多個單選按鈕,而它實際上只是一個組件。這比使用分組框和多個單選按鈕更直觀和簡單。
28)問:單選按鈕分組框又有哪些非凡的屬性呢?
答: 單選按鈕分組框有三個屬性是比較非凡的:
屬性Items是類TStrings的一個對象,這一點與Memo組件中的Lines屬性很相似,但是它們的含義不同,Lines屬性包含Memo組件中顯示的每一行字符串,而Items屬性雖然也包含許多字符串,但是每一個字符串代表單選按鈕組中的一個單選按鈕。
單擊Items屬性Value列中的省略號按鈕,可以打開一個字符串編輯器,然後在這個編輯器中可以輸入單選按鈕的標題。每個單選按鈕占用一行。
Columns屬性決定著單選按鈕分組框內分欄的數目,默認是1,最多可以有16欄,即16列。
ItemIndex屬性為單選分組框中被選中項的序號。-1表示不指向任何一個項。
29)問:復選按鈕(CheckBox)有什麼作用?
答:復選按鈕與單選按鈕不同,你可以一次選擇多個復選按鈕。復選按鈕有幾個比較重要的屬性。
Alignment屬性控制復選框標題的位置。
taRightJustify
標題出現在復選框的右邊
taLeftJustify
標題出現在復選框的左邊
缺省值為taRightJustify。
AllowGrayed屬性決定復選框是否可以處於灰色的狀態,當屬性值為True時,復選框有三種狀態,選中、未選中、和灰色;當屬性值為False時,復選框只有兩種狀態。缺省值為false。
Checked屬性確定復選框是否被選中。缺省值為false。
更多內容請看C/C++技術專題專題,或
要知道復選框是選中狀態、未選中狀態還是灰色狀態。,可以在運行的時候,用程序讀取運行時態變量State的值,缺省值為cbUnChecked。
<!-- frame contents -->
<!-- /frame contents -->
雖然復選框之間並不互相排斥,也就是說,直接放置在窗體上的每一個復選按鈕相互之間都不干擾,但是最好還是把復選框分組使用。這樣做的好處是便於用戶理解。
30)問: CheckBox、RadioButton如何完成動態改變其按鈕的標題? RadioGroup能動態添加吧?讀取上面三個組件標題又如何做呢?
答:CheckBox、RadioButton的屬性裡有一個Caption,它的屬性值就是按鈕的標題,所以應該說對這兩個組件來說很輕易做到的:
CheckBox1->Caption=”信息”;
Label1->Caption= CheckBox1->Caption;
RadioButton與CheckBox一樣,這裡就不多說了。
而RadioGroup裡面有一個Items屬性,這在《閒談BCB》中說過這個問題,所以你要添加按鈕,可以用下面的方法:
RadioGroup1->Items->Add(“我是新來的”);
讀取可以利用ItemsIndex來完成:
Label1->Caption=RadioGroup1->Items->Strings[RadioGroup1->ItemIndex];
String是把選中的序號轉換成你需要的文本,因為Items是Tstring對象,這類情況在你以後的學習中會經常看到的。
要注重在RadioGroup中也有一個Caption,這是用來給單選分組框設置標題的,這個標題與單選的文字無關。
(待續)
更多內容請看C/C++技術專題專題,或