VCL组件之按钮
VCL中包含好幾種類(lèi)型的按鈕,盡管它們不都是基于標(biāo)準(zhǔn)Windows按鈕,但仍把所有按鈕類(lèi)型列出來(lái)。在看具體的按鈕組件之前先復(fù)習(xí)下一些基本知識(shí)。
Note
設(shè)置按鈕的Caption屬性時(shí),使用&符號(hào),就像設(shè)置菜單項(xiàng)的Caption屬性一樣,&符號(hào)后面的字符會(huì)有下劃線(xiàn),作為按鈕的加速鍵。
1、按鈕屬性
按鈕屬性只有四個(gè)顯著屬性,如下:
- ModalResult
- Default
- Cancel
- Enabled
(1)ModalResult屬性
此屬性用于為顯示ShowModal的窗體提供內(nèi)部的關(guān)閉窗體。ModalResult缺省設(shè)置為mrNone(0)。這個(gè)值用于窗體上的普通按鈕并且不關(guān)閉窗體。如果對(duì)ModalResult使用任何非零值,則點(diǎn)擊按鈕會(huì)關(guān)閉窗體并返回ModalResult值。例如,把按鈕放置到窗體上,設(shè)置ModalResult屬性為mrOK,則點(diǎn)擊按鈕會(huì)關(guān)閉窗體,從ShowModal的返回值為mrOK(1),例如下面的代碼:
varRes: Integer; beginRes := MyForm.ShowModal;if Res = mrOK then{ do something};if Res = mrCancel thenExit; end;VCL ModalResult常量
| 常量 | 值 |
| mrNone | 0 |
| mrOK | 1 |
| mrCancel | 2 |
| mrAbort | 3 |
| mrRetry | 4 |
| mrIgnore | 5 |
| mrYes | 6 |
| mrNo | 7 |
| mrAll | 8 |
| mrNoToAll | 9 |
| mrYesToAll | 10 |
Note
不必對(duì)按鈕用一個(gè)預(yù)定義常量,可使用任何喜歡的值。例如某對(duì)話(huà)框上使用多個(gè)按鈕實(shí)現(xiàn)關(guān)閉,對(duì)每個(gè)按鈕可指定不同的ModalResult值(如100,150,200等),這樣就知道哪個(gè)按鈕關(guān)閉了對(duì)話(huà)框。任何非零值都可以關(guān)閉對(duì)話(huà)框。
我們做了一個(gè)測(cè)試程序,測(cè)試不同ModalResult的使用。此程序含有多個(gè)按鈕,點(diǎn)擊按鈕時(shí),ModalResult會(huì)在主窗體上返回值,代碼中有詳細(xì)解釋,請(qǐng)?jiān)敿?xì)閱讀,還有一些比較精巧的技巧。
主界面如下:
圖1
1、點(diǎn)擊“顯示Buttons窗口”后彈出對(duì)話(huà)框如下:
圖2
2、點(diǎn)擊“顯示BitBtns窗口”后彈出對(duì)話(huà)框如下:
圖3
以上代碼均在Delphi7中測(cè)試通過(guò),按鈕ModalResult屬性測(cè)試程序下載:ButtonTestProgram.rar
(2)Default屬性
對(duì)于缺省按鈕,如果希望用戶(hù)直接回車(chē)就相當(dāng)于單擊了這個(gè)按鈕,可以將它Default屬性設(shè)置為T(mén)rue。但是當(dāng)用戶(hù)在回車(chē)前按Tab鍵或方向鍵選擇了其他按鈕的話(huà),該按鈕就取得了輸入焦點(diǎn),那么回車(chē)觸發(fā)的就是這個(gè)按鈕的響應(yīng)事件。
缺省按鈕是設(shè)置為BS_DEFPUSHBUTTON類(lèi)型的按鈕,通常是OK按鈕。Default屬性用于設(shè)置按鈕為窗體的缺省按鈕。此屬性的缺省值為False。要把按鈕做成缺省按鈕,設(shè)置它的Default屬性為T(mén)rue。
Note
當(dāng)用戶(hù)按Enter鍵盤(pán)關(guān)窗體時(shí),缺省按鈕的OnClick處理程序會(huì)在窗體關(guān)閉前被調(diào)用。
(3)Cancel屬性
Cancel屬性使用Esc鍵,與Default屬性使用Enter鍵工作大體相同。若Cancel屬性設(shè)置為T(mén)rue,當(dāng)用戶(hù)按Esc鍵關(guān)閉窗體時(shí),從ShowModal的返回值為按鈕的ModalResult值。若沒(méi)有按鈕的Cancel屬性設(shè)為T(mén)rue,用戶(hù)按Esc鍵關(guān)閉窗體會(huì)返回mrCancel。
Note
點(diǎn)擊系統(tǒng)按鈕關(guān)閉或按Alt+F4關(guān)閉窗體會(huì)導(dǎo)致從ShowModal返回mrCancel。然而按Esc鍵會(huì)返回Cancel設(shè)置為T(mén)rue的按鈕的ModalResult屬性,在窗體關(guān)閉時(shí),該Cancel屬性為T(mén)rue的按鈕OnClick事件處理程序被調(diào)用。如果用系統(tǒng)按鈕關(guān)閉或Alt + F4關(guān)閉窗體,沒(méi)有OnClick事件被調(diào)用。一定要考慮到用戶(hù)使用窗體的不同操作方式。
?
Note
可以把多個(gè)按鈕的Default屬性設(shè)為T(mén)rue。類(lèi)似地,可以把多個(gè)按鈕的Cancel屬性設(shè)為T(mén)rue。當(dāng)是,當(dāng)用戶(hù)在鍵盤(pán)按Enter鍵時(shí),在具有Default屬性為T(mén)rue的且Tab順序?yàn)榈谝粋€(gè)的按鈕被激活。類(lèi)似地,當(dāng)用戶(hù)按ESC鍵關(guān)閉窗體時(shí),從ShowModal返回值將是具有Cancel屬性為T(mén)rue的且Tab順序中第一個(gè)按鈕的ModalResult值。
(4)Enabled屬性
這個(gè)屬性經(jīng)常對(duì)按鈕使用,允許或禁止按鈕依賴(lài)于程序或特定窗體的當(dāng)前狀態(tài)。當(dāng)按鈕被禁止時(shí)候(它的Enabled屬性為False),其文本是灰色的,按鈕不起作用。在用位圖的按鈕的情形(BitBtn和SpeedButton)時(shí),圖像也自動(dòng)變灰下來(lái)。
?
OnClick是按鈕的重要事件。當(dāng)用戶(hù)單擊按鈕、在按鈕有輸入焦點(diǎn)時(shí)按下空格鍵、按下按鈕的快捷鍵、對(duì)默認(rèn)按鈕使用回車(chē)鍵、對(duì)取消按鈕使用Esc鍵等情況下,按鈕的OnClick事件都會(huì)被觸發(fā)。
2、Button組件
TButton位于Standard組件面板上,是封裝在Delphi組件庫(kù)中的一個(gè)普通按鈕組件。按鈕很容易使用。在窗體上插入一個(gè)Button對(duì)象,給其Caption屬性設(shè)置按鈕標(biāo)題。為了在用戶(hù)單擊按鈕時(shí)完成動(dòng)作,為按鈕的OnClick事件創(chuàng)建一個(gè)事件處理程序。TButton繼承關(guān)系如下:
缺省放置在窗體上的Button按鈕,高度為25像素,寬度為75像素。
3、BitBtn組件
位圖按鈕TBitBtn位于Additional組件面板上。它的工作方式類(lèi)似于Button組件,但可以在按鈕上顯示一個(gè)圖標(biāo),這樣就更便于用戶(hù)理解該按鈕的作用。BitBtn組件上可以同時(shí)顯示文本和位圖,比一般按鈕更直觀。TBitBtn類(lèi)繼承關(guān)系如下:
下面介紹下該組件的特有的幾個(gè)屬性:
(1)Glyph屬性和NumGlyphs屬性
Glyph屬性指定了顯示在按鈕上的自定義位圖。
NumGlyphs屬性指定位圖按鈕使用的自定義位圖的個(gè)數(shù),取值為1~4之間,如下圖所示,但這幾幅位圖實(shí)際上保存在一個(gè)用Glyph屬性指定的文件中。要使用自定義位圖,必須首先將Kind屬性設(shè)置為bkCustom。你可以在運(yùn)行期給Glyphs指定一個(gè)TBitmap對(duì)象,或者在設(shè)計(jì)期時(shí)指定,做法如下:在Object Inspector中單擊Glyph屬性右側(cè)的“…”按鈕,彈出Picture Editor窗口,單擊“Load”按鈕可以調(diào)入一個(gè)位圖文件。由于這個(gè)文件最多包含4個(gè)同樣大小且組成一排的位圖,因此這個(gè)位圖文件的長(zhǎng)度必定是寬度像素值的1到4倍。
位圖按鈕的四種狀態(tài)圖標(biāo)
| 位圖位置 | 按鈕狀態(tài) | 說(shuō)明 |
| 1 | 彈起 | 該位圖會(huì)顯示在彈起狀態(tài)下的按鈕上 |
| 2 | 禁用 | 該位圖通常呈現(xiàn)灰色來(lái)表示按鈕不可用 |
| 3 | 單擊 | 當(dāng)用戶(hù)單擊按鈕時(shí)顯示該位圖。松開(kāi)左鍵時(shí),恢復(fù)到第一個(gè)位圖 |
| 4 | 按下 | 當(dāng)按鈕保持按下的狀態(tài)時(shí)顯示該位圖 |
當(dāng)該文件只包含一幅位圖時(shí),位圖按鈕就不會(huì)對(duì)該位圖做一些變化來(lái)表示其他狀態(tài)(按下?tīng)顟B(tài)不會(huì)改變)。如果你對(duì)這樣的按鈕效果不滿(mǎn)意,只要自己添加其他三個(gè)位圖啦。
Note
在NumGlyphs屬性中說(shuō)明的位圖個(gè)數(shù)必須和實(shí)際個(gè)數(shù)相同。
位圖左下角(The lower left )點(diǎn)處像素的顏色是默認(rèn)透明色。如果不想用左上角像素作為透明色,可以設(shè)置TBitmap對(duì)象的TransparentMode屬性為tmFixed,然后設(shè)置TransparentColor屬性為選擇的透明色。
Delphi標(biāo)準(zhǔn)按鈕的位圖尺寸為15X15,該尺寸很適合標(biāo)準(zhǔn)按鈕的25像素高度。當(dāng)然位圖可以是任意高度,但BitBtn組件不根據(jù)位圖來(lái)設(shè)置按鈕尺寸。使用較大的位圖時(shí),就必須相應(yīng)地設(shè)置按鈕尺寸。
(2)Kind屬性
確定位圖按鈕的類(lèi)型,缺省值為bkCustom。
它能從幾個(gè)預(yù)定義按鈕種類(lèi)中選擇,選擇后會(huì)導(dǎo)致以下屬性自動(dòng)改變:
在上面的“按鈕ModalResult屬性測(cè)試程序”中顯示了一個(gè)BitBtns窗口,此窗體包含了每一種類(lèi)型的BitBtn按鈕。請(qǐng)自行下載測(cè)試。
(3)Layout屬性
決定位圖出現(xiàn)在按鈕上的位置,有blGlyphBottom、blGlyphLeft、blGlyphRight或blGlyphTop四種取值,默認(rèn)值為blGlyphLeft。
(4)Margin屬性
決定位圖與按鈕邊界間隔的像素?cái)?shù),默認(rèn)為-1,即位圖居中。
(5)Spacing屬性
決定標(biāo)題與位圖之間間隔的像素?cái)?shù),默認(rèn)值為4。
4、SpeedButton組件
TSpeedButton也稱(chēng)為“加速按鈕”,位于Additional組件面板上。SpeedButton對(duì)象通常出現(xiàn)在應(yīng)用程序的工具欄上,但也可以單獨(dú)當(dāng)按鈕使用。它與Button及BitBtn不同,它不是窗口組件,沒(méi)有窗口句柄及相關(guān)Windows結(jié)構(gòu),所以帶有十幾個(gè)SpeedButton的窗體比帶有十幾個(gè)標(biāo)準(zhǔn)按鈕的窗體占用較少的內(nèi)存。SpeedButton比標(biāo)準(zhǔn)控件顯示速度更快。SpeedButton不能接受輸入焦點(diǎn)。另一個(gè)優(yōu)點(diǎn)是可作為開(kāi)/關(guān)按鈕,當(dāng)按下這樣的按鈕時(shí)它就保持按下?tīng)顟B(tài)。
另一方面,SpeedButton組件于BitBtn組件有幾個(gè)公用的屬性。SpeedButton處理Glyph屬性的方式與BitBtn組件一樣。缺省地SpeedButton按鈕時(shí)正方形25 x 25像素,SpeedButton可以是任意喜歡的尺寸,可以包含文本。
TSpeedButton類(lèi)繼承關(guān)系如下:
下面對(duì)SpeedButton某些具體屬性進(jìn)行介紹:
GroupIndex屬性、AllowAllUp屬性及Down屬性
通常屬于同一組(GroupIndex屬性相同)的加速按鈕以互斥的方式工作。比如當(dāng)一個(gè)按鈕處于按下?tīng)顟B(tài)時(shí),所有其他的按鈕會(huì)彈起。當(dāng)AllowAllUp屬性為T(mén)rue時(shí),在一組中的加速按鈕可以同時(shí)處于彈起狀態(tài)。單擊一個(gè)處于按下?tīng)顟B(tài)的按鈕時(shí),該按鈕彈起,而其他按鈕依然處于彈起狀態(tài);而如果AllowAllUp屬性為False時(shí),則在同一時(shí)間該組內(nèi)必須有一個(gè)按鈕處于按下?tīng)顟B(tài)。單擊按下?tīng)顟B(tài)的按鈕也不會(huì)讓它彈起。當(dāng)在設(shè)置某個(gè)加速按鈕的AllowAllUp屬性時(shí),其他與該按鈕同組的加速按鈕的AllowAllUp屬性也會(huì)自動(dòng)發(fā)生相同的改變。
Down屬性用來(lái)判斷按鈕處于何種狀態(tài),當(dāng)為T(mén)rue時(shí),處于按下?tīng)顟B(tài);否則處于彈起狀態(tài)。你可以在設(shè)計(jì)期將其設(shè)置為T(mén)rue,這樣按鈕一開(kāi)始就是處于按下?tīng)顟B(tài)。
Note
必須在按鈕的GroupIndex屬性大于零時(shí),Down屬性才有作用。如果GroupIndex屬性為零時(shí),單擊按鈕,按鈕不會(huì)保持按下?tīng)顟B(tài)。
Flat屬性指定該按鈕是否具有立體外觀,當(dāng)為T(mén)rue時(shí),可以表現(xiàn)出彈起和按下的狀態(tài)。當(dāng)設(shè)為False時(shí),最好用不同的圖標(biāo)來(lái)提示用戶(hù)該按鈕的狀態(tài)。
5、RadioButton(單選按鈕)
TRadioButton類(lèi)繼承關(guān)系如下:
?
單選按鈕十分常用,一般都是成組出線(xiàn)并且都是互斥的,即用戶(hù)在一組選項(xiàng)中只能選擇唯一的一個(gè)選項(xiàng)。一旦一個(gè)選項(xiàng)被選擇,其他選項(xiàng)將自動(dòng)處于未選狀態(tài)。
實(shí)現(xiàn)單選按鈕有種辦法:
- 使用單選按鈕組件(TRadioButton)
- 使用單選按鈕成組組件(TRadioGroup)
RadioButton位于Standard組件面板上,在默認(rèn)情況下,放在同一個(gè)容器,如Panel、RadioGroup中的單選框總是自動(dòng)變成一組。下表列出了TRadioButton的常用屬性。
RadioButton的常用屬性
| 屬性 | 含義 |
| Alignment | 決定了選項(xiàng)的標(biāo)題與按鈕之間的相對(duì)位置,有taLeftJustify和taRightJustify兩種選擇 |
| Checked | 該選項(xiàng)是否被選中 |
在使用RadioButton對(duì)象來(lái)設(shè)置單選按鈕時(shí),一般都是先在窗體上放置若干個(gè)GroupBox,再將RadioButton分別放置到響應(yīng)的GroupBox中去,這樣按鈕就屬于GroupBox了,一旦該GroupBox被刪除,其中的RadioButton也將刪除。
位于Standard組件面板上的RadioGroup組件來(lái)設(shè)置單選按鈕組比用RadioButton和GroupBox來(lái)的更為方便。下面列出了TRadioGroup組件的主要屬性。
RadioGroup組件的主要屬性
| 屬性 | 含義 |
| Columns | 制定了該RadioGroup中含有的單選按鈕共排列多少列 |
| ItemIndex | 表明當(dāng)前被選擇單選按鈕的序號(hào) |
| Items | 包含了所有單選按鈕標(biāo)題的字符串列表 |
單擊Object Inspector的Items屬性右側(cè)的“…”按鈕,會(huì)彈出“String List Editor”對(duì)話(huà)框,對(duì)話(huà)框中的一行就是RadioGroup中一個(gè)單選按鈕的標(biāo)題。
?
6、CheckBox(復(fù)選框)
TCheckBox類(lèi)繼承關(guān)系如下:
CheckBox組件位于Standard組件面板上。和RadioButton不同的是,它是一種可以“復(fù)選”的組件,一系列的選項(xiàng)在同時(shí)可以選擇一個(gè)或多個(gè)。復(fù)選框的主要屬性如下:
復(fù)選框的主要屬性
| 屬性 | 含義 |
| AllowGrayed | 指定該按鈕是否可以灰顯 |
| State | 表明或指定該按鈕的狀態(tài),有cbUnchecked、cbChecked和cbGrayed三種狀態(tài) |
Note
請(qǐng)不要將灰顯狀態(tài)和禁用狀態(tài)混淆。如果AllowGrayed屬性為T(mén)rue,復(fù)選框就處于變灰單用戶(hù)仍可以操作的狀態(tài);而當(dāng)Enabled屬性為False時(shí),整個(gè)復(fù)選框?qū)⒆兓?#xff0c;并且用戶(hù)將無(wú)法操作。如下圖:
如果AllowGrayed屬性為False(缺省值),可以通過(guò)Checked屬性來(lái)確定復(fù)選框是否選中;如果AllowGrayed屬性為T(mén)rue,必須用State屬性來(lái)表明或設(shè)置復(fù)選框狀態(tài)。
Tip
有時(shí)也許想用復(fù)選框來(lái)提示某種屬性是開(kāi)或是關(guān)的,但使用戶(hù)不能再?gòu)?fù)選框上點(diǎn)擊來(lái)改變狀態(tài)。即想復(fù)選框是禁止的但是顯示是正常的。要是復(fù)選框只讀而不變灰,在面板Panel組件上放置復(fù)選框并改變面板Panel的Enabled屬性為False。
轉(zhuǎn)載于:https://www.cnblogs.com/pchmonster/archive/2012/01/26/2329616.html
總結(jié)
- 上一篇: bat 执行 java jar包
- 下一篇: s3c2440移植MQTT