青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 16, 文章 - 1, 評(píng)論 - 4, 引用 - 0
數(shù)據(jù)加載中……

C++ Builder 初學(xué)問(wèn)與答(一~五)

一直以來(lái)都想寫(xiě)一點(diǎn)為BCB初學(xué)者快速入門的東西,前不久寫(xiě)了幾篇《閑談BCB》想把自己學(xué)習(xí)BCB中如何來(lái)解決難點(diǎn)的方法說(shuō)給大家,沒(méi)想到被罵得不成樣子。本想不寫(xiě)了,但覺(jué)得這些東西留下來(lái)能做什么呢?還是用另一種方法來(lái)重新演譯我的思維吧,最近有些忙,那幾篇沒(méi)有寫(xiě)完的文章,我也會(huì)盡快寫(xiě)完的,至于《深入QR》,我想我一定會(huì)用另一種手法來(lái)寫(xiě),讓你一看就會(huì)把QR這個(gè)嬌女的所有衣服都脫光,不整理到這個(gè)地步,我是不敢輕易再拿出來(lái),還請(qǐng)朋友見(jiàn)諒!

本文分為《基礎(chǔ)入門》、《快速提高》與《成功編程者》三部分。

  第一部分:基礎(chǔ)入門

  1.窗體

  1)問(wèn):Windows的編程就是在窗體的基礎(chǔ)上實(shí)現(xiàn)的, C++Builder是怎樣處理窗體的呢?

  答:窗體的一部分功能通過(guò)窗體的屬性來(lái)實(shí)現(xiàn),窗體的屬性非常多,這里只對(duì)其中比較重要的屬性進(jìn)行介紹。

  1.ActiveControl指定窗體上的某個(gè)組件為輸入焦點(diǎn)。如下面的語(yǔ)句將窗體上的Label1組件成為輸入焦點(diǎn):ActiveControl=Label1。在同一時(shí)時(shí)刻,應(yīng)用程序只能有一個(gè)輸入焦點(diǎn)。

  2.BorderIcons用來(lái)設(shè)定標(biāo)題欄上出現(xiàn)哪些系統(tǒng)圖標(biāo)。它是一個(gè)集合,可以設(shè)成以下幾個(gè)類型:最大化按鈕(biMaximize)、最小化按鈕(biMinimize)、幫助按鈕(biHelp)和系統(tǒng)菜單(biSystemMenu)。

  3.Icon屬性用來(lái)指定當(dāng)窗體最小化時(shí)顯示的圖標(biāo)。

  4.KeyPreview屬性為true時(shí),表示擊鍵事件發(fā)生時(shí)先傳給窗體,然后再傳給有輸入焦點(diǎn)的組件上,相當(dāng)于窗體截獲了原本屬于組件的事件。缺省值為false,表示擊鍵事件只送到當(dāng)前有輸入焦點(diǎn)的組件上。

  5. Menu屬性用來(lái)指定窗體的主菜單。

  6.Visible屬性用來(lái)確定窗體是否可見(jiàn)。

  此外還有一些運(yùn)行時(shí)態(tài)屬性,這些屬性只有在程序運(yùn)行的時(shí)候才能通過(guò)編程訪問(wèn)。這種屬性主要有:

  Active
  屬性用來(lái)確定窗體是否獲得輸入焦點(diǎn)。
  
  ActiveMDIChild
  這個(gè)函數(shù)將返回當(dāng)前活動(dòng)的子窗體。
  
  DropTarget
  屬性用來(lái)指定窗體是否是拖放操作的對(duì)象。
  
  Parent
  屬性用來(lái)設(shè)定包含窗體的窗口控件,通常是另一個(gè)窗體。如果窗體沒(méi)有包含它的控件,那么它的Parent屬性為nil。

2)問(wèn): Windows窗體有很多樣式,比如對(duì)話框,彈出窗口。如果我要控制窗體的邊界樣式,應(yīng)該怎么辦?





  答:屬性BorderStyle可以指定窗體邊界的外觀和行為。它一共有六種可能的取值。

  bsDialog
  表示大小不可變的標(biāo)準(zhǔn)的對(duì)話框邊界。
  
  bsSingle
  表示大小不可變的單線邊界。
  
  bsNone
  表示大小不可變、沒(méi)有邊界。
  
  bsSizeable
  表示標(biāo)準(zhǔn)的可改變大小的窗體。
  
  bsToolWindow
  與bsSingle時(shí)類似,但是標(biāo)題較小,用做工具框窗口。
  
  bsSizeToolWin
  與bsSizeable時(shí)相似,但是標(biāo)題較小,做工具框窗口。

  要注意的是,對(duì)于MDI子窗體,bsDialog或bsNone將不起作用。

  3)問(wèn):同樣是獲得焦點(diǎn),ActiveControl與SetFocus()有什么不同?

  答: ActiveControl是把焦點(diǎn)交給組件,它是一個(gè)屬性。而SetFocus()是組件主動(dòng)要焦點(diǎn),是一個(gè)方法。書(shū)寫(xiě)格式也不一樣。例如,我們想使同樣的一個(gè)Button1獲得焦點(diǎn),可以下的兩種寫(xiě)法:

  ActiveControl=Button1或Button1=SetFocus()

  二者作用是一樣的,不過(guò)一般都習(xí)慣用第一種方式。

  4)問(wèn):屬性FormStyle有什么作用?

  答:屬性FormStyle可以確定窗體的類型,它一共有四種屬性值。

  fsNormal
  表示窗體既不是MDI父窗口也不是MDI子窗口,只可能是單文檔SDI窗口或者對(duì)話框。這個(gè)屬性值是缺省值。
  
  fsMDIChild
  表示這個(gè)窗體是一個(gè)MDI子窗口。
  
  fsMDIForm
  表示這個(gè)窗體是一個(gè)MDI父窗口。

  fsStayOnTop
  表示窗體始終保持在窗體所屬工程中其它窗體的上面,除非還有別的窗體的FormStyle屬性也被設(shè)置成了fsStayOnTop。

  要特別注意的是,在程序運(yùn)行期間不要修改窗體的FormStyle屬性。

  5)問(wèn):屬性Position有什么作用?

  答:屬性Position可以確定程序運(yùn)行時(shí)出現(xiàn)在屏幕上的窗體的大小和位置,它有五種可能的取值。

  1.poDesigned表示使用設(shè)計(jì)時(shí)指定的尺寸和位置屬性時(shí)顯示窗體。尺寸屬性是指Height和Width,位置屬性是指Left和Top。這個(gè)屬性值是缺省值。

  2.poDefault表示窗體在屏幕上顯示的位置和大小由Windows決定。每次運(yùn)行應(yīng)用程序時(shí),窗體都會(huì)稍微向下向右移動(dòng)。

  3.poDefaultPosOnly表示窗體以設(shè)計(jì)時(shí)的窗體尺寸顯示窗體,但是在屏幕上顯示的位置由Windows確定。每次運(yùn)行應(yīng)用程序時(shí),窗體都會(huì)稍微向下向右移動(dòng)。當(dāng)無(wú)法再向下移動(dòng)時(shí),就又會(huì)從屏幕的左上角開(kāi)始顯示。

  4.poDefaultSizeOnly表示窗體的位置由設(shè)計(jì)時(shí)指定的值確定,而尺寸由Windows確定。

  5.poScreenCenter表示使用設(shè)計(jì)時(shí)指定的尺寸和位置屬性,在屏幕的中央顯示窗體。

  6)問(wèn):如何最大化或最小化窗體?

  答:屬性WindowState與窗體的顯示有關(guān),它有三種可能的取值。

  wsNormal
  窗體既不是最大化顯示也不是最小化顯示。這個(gè)值是缺省值。
  
  wsMinimized
  窗體最小化顯示。
  
  wsMaximized
  窗體最大化顯示。

  7)問(wèn):屬性ClientHeight和ClientWidth有什么作用?

  答:這兩個(gè)屬性用來(lái)定義窗體用戶區(qū)域的高和寬。所謂用戶區(qū)域窗體的實(shí)際工作區(qū)域,就是除了窗體的標(biāo)題欄、菜單條、工具條和狀態(tài)條以及邊框之外的窗體區(qū)域。所以對(duì)于新創(chuàng)建的窗體,它的用戶區(qū)域比窗體的大小要稍微小一些,相對(duì)而言,窗體的大小是由屬性Height和Width確定的。

  8)問(wèn):如何動(dòng)態(tài)創(chuàng)建一個(gè)窗體呢?

  答:我們先創(chuàng)建一個(gè)主窗體MainForm,把她的Caption改為“主窗體”,把FormStyle屬性改為fsMDIForm。再創(chuàng)建一個(gè)子窗體windows1,把Caption改為“子窗體”,把FormStyle屬性改為fsMDIChild。

  fsStayOnTop
  表示窗體始終保持在窗體所屬工程中其它窗體的上面,除非還有別的窗體的FormStyle屬性也被設(shè)置成了fsStayOnTop。

  要特別注意的是,在程序運(yùn)行期間不要修改窗體的FormStyle屬性。

  5)問(wèn):屬性Position有什么作用?

  答:屬性Position可以確定程序運(yùn)行時(shí)出現(xiàn)在屏幕上的窗體的大小和位置,它有五種可能的取值。

  1.poDesigned表示使用設(shè)計(jì)時(shí)指定的尺寸和位置屬性時(shí)顯示窗體。尺寸屬性是指Height和Width,位置屬性是指Left和Top。這個(gè)屬性值是缺省值。

  2.poDefault表示窗體在屏幕上顯示的位置和大小由Windows決定。每次運(yùn)行應(yīng)用程序時(shí),窗體都會(huì)稍微向下向右移動(dòng)。

  3.poDefaultPosOnly表示窗體以設(shè)計(jì)時(shí)的窗體尺寸顯示窗體,但是在屏幕上顯示的位置由Windows確定。每次運(yùn)行應(yīng)用程序時(shí),窗體都會(huì)稍微向下向右移動(dòng)。當(dāng)無(wú)法再向下移動(dòng)時(shí),就又會(huì)從屏幕的左上角開(kāi)始顯示。

  4.poDefaultSizeOnly表示窗體的位置由設(shè)計(jì)時(shí)指定的值確定,而尺寸由Windows確定。

  5.poScreenCenter表示使用設(shè)計(jì)時(shí)指定的尺寸和位置屬性,在屏幕的中央顯示窗體。

  6)問(wèn):如何最大化或最小化窗體?

  答:屬性WindowState與窗體的顯示有關(guān),它有三種可能的取值。

  wsNormal
  窗體既不是最大化顯示也不是最小化顯示。這個(gè)值是缺省值。
  
  wsMinimized
  窗體最小化顯示。
  
  wsMaximized
  窗體最大化顯示。

  7)問(wèn):屬性ClientHeight和ClientWidth有什么作用?

  答:這兩個(gè)屬性用來(lái)定義窗體用戶區(qū)域的高和寬。所謂用戶區(qū)域窗體的實(shí)際工作區(qū)域,就是除了窗體的標(biāo)題欄、菜單條、工具條和狀態(tài)條以及邊框之外的窗體區(qū)域。所以對(duì)于新創(chuàng)建的窗體,它的用戶區(qū)域比窗體的大小要稍微小一些,相對(duì)而言,窗體的大小是由屬性Height和Width確定的。

  8)問(wèn):如何動(dòng)態(tài)創(chuàng)建一個(gè)窗體呢?

  答:我們先創(chuàng)建一個(gè)主窗體MainForm,把她的Caption改為“主窗體”,把FormStyle屬性改為fsMDIForm。再創(chuàng)建一個(gè)子窗體windows1,把Caption改為“子窗體”,把FormStyle屬性改為fsMDIChild。

選擇“Project|Options…”菜單項(xiàng),將會(huì)彈出一個(gè)如圖所示的對(duì)話框。

  在這里我們可以通過(guò)下拉框選擇主窗體(Main form),在左側(cè)的Auto-create forms里列出了所有的窗口,這里面的窗口通常是動(dòng)態(tài)創(chuàng)建,你可以把需要?jiǎng)討B(tài)創(chuàng)建的窗口(Available forms)通過(guò)中間的那四個(gè)按鈕調(diào)到右側(cè),然后OK就可以了。

  動(dòng)態(tài)的創(chuàng)建的方法如下:

void _fastcall TForm1::Button1Click(TObject *Sender)

{

   Tform2 *Forms;

   try

   {

Form2=new TForm2(Application);//動(dòng)態(tài)創(chuàng)建Form2

Form2->ShowModal();

delete Form2;//把Form2釋放

   }

   catch(Exception &exception)

   {

delete Form2;

Application->ShowException(&exception);

}

}

要注意一般你可能不喜歡用上面的那種形式,而寫(xiě)成如下格式:

void _fastcall TForm1::Button1Click(TObject *Sender)

{

   Tform2 *Forms;

Form2=new TForm2(Application);//動(dòng)態(tài)創(chuàng)建Form2

……

}

  你要記住,無(wú)論你的子窗體創(chuàng)建是否完成,你都必須運(yùn)行delete來(lái)釋放你剛才創(chuàng)建的子窗體,當(dāng)然你也可以把釋放的過(guò)程寫(xiě)在OnClose事件函數(shù)內(nèi),這個(gè)函數(shù)有一個(gè)參數(shù)為Action,它有四個(gè)取值:caNone為不關(guān)閉窗體,什么也不操作;caHide為不關(guān)閉窗體,但把它隱藏起來(lái);caFree為關(guān)閉窗體,同時(shí)釋放內(nèi)存;caMinimize為最小化窗體,不關(guān)閉。所以我們也可以象下面這樣來(lái)釋放子窗體。

void _fastcall TForm2::FormClose(Tobject *Sender,TcloseAction &Action)

{

  Action=caFree;

}

  9)問(wèn):為什么我們用Close()不能關(guān)閉我當(dāng)前活動(dòng)的子窗體?

  答:關(guān)閉當(dāng)前活動(dòng)窗體,很多人會(huì)用如下的方法:

void _fastcall TForm1::Button2Click(Tobjcet *Sender)

{

  ActiveMDIChild->Close();//注意這是在主窗體(或者說(shuō)在其它窗體)中來(lái)關(guān)閉當(dāng)前活動(dòng)的子窗體,這樣做不好,一般的關(guān)閉應(yīng)該象10)問(wèn)中那樣來(lái)做

}

此時(shí)窗體并沒(méi)有關(guān)閉,而是最小化了,因此要在子窗體的OnClose事件中用如下代碼來(lái)關(guān)閉。

void _fastcall TForm2::FormClose(Tobject *Sender,TCloseAction &Action)

{

  Action=caFree;

}

  這段程序不用多說(shuō)了,上面都說(shuō)過(guò)了。

  這里有一點(diǎn)要說(shuō)明一下,就是在調(diào)用Close()時(shí),會(huì)自動(dòng)觸發(fā)OnClose事件,而由上我們知道窗體沒(méi)有關(guān)閉,而是最小化,說(shuō)明在OnClose中Action的此時(shí)的值為caMinimize。所以我們要寫(xiě)上面的方法來(lái)關(guān)閉。

  10)問(wèn):Show()與ShowModal()有什么不同?

  答:我們的程序中不可能就只有一個(gè)Form,比如,有Form1和Form2兩個(gè)窗口,我們?cè)贔orm1中調(diào)用Form2應(yīng)該先在Unit1.cpp的開(kāi)頭部分加入:

#include “Unit2.h”

  在要調(diào)用的地方加入:

Form2->Show();//或是Form2->ShowModal();

  兩者的區(qū)別在于若使用了ShowModal()則必須關(guān)閉Form2,才能處理其它窗口的內(nèi)容,而Show()則不用。當(dāng)然你可以直接在Form2直接創(chuàng)建一個(gè)Button1來(lái)關(guān)閉她,程序內(nèi)容如下:

void _fastcall TForm2::Button1Click(Tobject *Sender)

{

Close();

}

  在Close前,不需要加上Form2,因?yàn)檫@行程序就是在Form2上運(yùn)行的,所以默認(rèn)的父組件就是Form2。
2.文本輸入組件
11)問(wèn):如果要實(shí)現(xiàn)文本輸入,在C++Builder中應(yīng)該怎么辦?

  答:C++Builder常用文本輸入組件來(lái)實(shí)現(xiàn),常用的文本輸入組件有Edit、MaskEdit 、Memo和RichEdit。他們的主要不同在于Edit和MaskEdit用于輸入單行文本,而Memo和RichEdit可以輸入多行文本。此外Label組件也可用來(lái)進(jìn)行文本顯示。

  Edit和MaskEdit是一個(gè)窗口控件,它可以獲得輸入焦點(diǎn)。當(dāng)用戶需要輸入單行文本時(shí),就應(yīng)該使用編輯框。它通常與標(biāo)簽組件一起使用。

  12)問(wèn):編輯框(Edit)常用的屬性有哪幾個(gè)?

  答:編輯框常用的幾個(gè)屬性如下:

  Text屬性是一個(gè)String類型的數(shù)據(jù),它決定了在編輯框中出現(xiàn)的文本字符串。在編程中,我們經(jīng)常要通過(guò)text屬性獲取編輯框中的文本字符串

  MaxLength是一個(gè)Integer類型的數(shù)據(jù),它指定編輯框所能容納的最大字符數(shù)。缺省情況下為0,表示長(zhǎng)度不限。

   編輯框還可以用做口令輸入。具體方法是,把PasswordChar屬性設(shè)置為除#0之外的任何字符。這時(shí),無(wú)論你在編輯框中輸入什么字符,都只顯示PasswordChar包含的字符。我們經(jīng)常把PasswordChar設(shè)置為星號(hào)*,當(dāng)用戶輸入口令時(shí)只顯示星號(hào)。如輸入#0表示編輯框正常顯示。PasswordChar是一個(gè)字符類型的數(shù)據(jù)。

  如果要限制用戶對(duì)編輯框?qū)懙臋?quán)利。可以使用屬性ReadOnly,當(dāng)ReadOnly的值為True時(shí)只讀。

13)問(wèn):標(biāo)簽控件(Label)起什么作用?

  答:標(biāo)簽的常用屬性有Caption和FocusControl。

  Caption屬性是字符串類型,用來(lái)指定標(biāo)簽的標(biāo)題,也就是標(biāo)簽的顯示內(nèi)容。

  FocusControl屬性是窗口控件類,用來(lái)指定一個(gè)與標(biāo)簽相連的窗口控件。從而允許這個(gè)控件使用快捷鍵來(lái)獲得輸入焦點(diǎn)。

  標(biāo)簽是一個(gè)典型的非窗口控件,它不能獲得輸入焦點(diǎn),所以經(jīng)常被用來(lái)給一些沒(méi)有Caption屬性的組件做標(biāo)簽。標(biāo)簽還能同時(shí)給這些組件提供快捷鍵的功能,允許用戶通過(guò)快捷鍵獲得輸入焦點(diǎn)。

  14)問(wèn):那在Label中如何使用Caption與FocusControl呢?

  答:下面舉個(gè)例子說(shuō)吧(這個(gè)例子在第19問(wèn)中會(huì)用到):

  首先在輸入標(biāo)題時(shí)需要指定一個(gè)快捷鍵,這可以用在一個(gè)字母前面加上一個(gè)連字符&來(lái)實(shí)現(xiàn)。單擊caption屬性輸入欄,輸入&N姓名,這里字母N就被指定為快捷鍵,要注意的是中文是不能被指定為快捷鍵的,只有26個(gè)英文字母才可以。

  然后,把標(biāo)簽的FocusControl屬性與編輯框Edit1相連,選擇FocusControl屬性,從屬性值字段列舉的窗體上所有的窗口控件中選取Edit1。這樣當(dāng)用戶按下Alt+N時(shí),輸入焦點(diǎn)就會(huì)轉(zhuǎn)移到編輯框Edit1。

  15)問(wèn):我遇到一些程序,當(dāng)在編輯中輸入完文本后,按一下回車鍵,程序就開(kāi)始執(zhí)行了,C++Builder應(yīng)該怎樣實(shí)現(xiàn)?

  答:當(dāng)然可以。當(dāng)我們按下回車鍵時(shí),產(chǎn)生了OnKeyPress事件。所以如果要在程序中處理這種事件,這就要編寫(xiě)OnKeyPress事件處理程序。

  還有三種事件是編輯框常用的事件:OnChange事件、OnEnter事件和OnExit事。每當(dāng)編輯框中的文本發(fā)生改變時(shí)都會(huì)觸發(fā)OnChange事件。當(dāng)編輯框獲得輸入焦點(diǎn)時(shí)會(huì)觸發(fā)OnEnter事件,而失去焦點(diǎn)時(shí)會(huì)產(chǎn)生OnExit事件。

16)問(wèn):簡(jiǎn)單說(shuō)一下Memo組件的重要屬性?

  答: Memo與Edit的屬性有很多相似的,下面只來(lái)說(shuō)一下Memo組件的重要屬性。

  Lines屬性是一個(gè)TStrings類的一個(gè)對(duì)象,它是由多個(gè)字符串組成的,每一個(gè)字符串就是Lines中的一個(gè) 元素。Memo組件的每一行文本都是Lines中的一個(gè)字符串。

  在設(shè)計(jì)階段,如果要給Memo組件增加一些顯示內(nèi)容,可以在對(duì)象編輯器中選擇屬性Lines,單擊Value列上的省略號(hào)按鈕,這時(shí)會(huì)打開(kāi)一個(gè)字符串編輯窗口。

  在這個(gè)編輯器中輸入文本。編輯器中顯示的所有內(nèi)容都會(huì)出現(xiàn)在Memo組件中。

  Memo組件屬性中:

  Alignment
   用來(lái)確定Memo組件中顯示文本的對(duì)齊方式。

  WordWrap
   確定文本到達(dá)右邊界時(shí)是否自動(dòng)換行

  WantReturn
   確定用戶是否可以在文本中插入回車符。

  WantTabs
   確定用戶是否可以在文本中插入Tab字符。

  屬性ScrollBar是一個(gè)常見(jiàn)的屬性,它確定著滾動(dòng)組件滾動(dòng)條的行為。ScrollBar有四種可能的取值:

  SsNone
   表示沒(méi)有滾動(dòng)條;

  ssHorizonal
   表示只有水平滾動(dòng)條;

  ssVertical
   表示只有垂直條;

  SsBoth
   表示既有水平滾動(dòng)條也有垂直滾動(dòng)條。

當(dāng)顯示的內(nèi)容比較多時(shí),應(yīng)該選擇ssBoth,這樣才能夠使用戶看到所有的內(nèi)容。

17)問(wèn):要在程序運(yùn)行期間修改Memo組件的顯示內(nèi)容,應(yīng)該怎么辦?

  答:這就需要使用TStrings類的某些屬性和方法。例如要給Memo組件增加一句話“我來(lái)了”,那么可以使用方法Add來(lái)完成。

Lines->Add(“我來(lái)了”);

  要尋找Memo中的某一行,可以使用Lines->Strings[n]的形式,不過(guò)要注意Lines的字符串是從0開(kāi)始的,所以在與Memo中的實(shí)際行號(hào)對(duì)應(yīng)時(shí),行號(hào)需要減一。

  18)問(wèn):如果我要實(shí)現(xiàn)文本的剪切、復(fù)制和粘貼,應(yīng)該怎么辦?

  答:Memo組件提供了三個(gè)用來(lái)完成剪切、復(fù)制和粘貼的方法。CutToClipboard用來(lái)把Memo組件中被選中的文本剪切到剪切板。

  CopyToClipboard用來(lái)把Memo組件中被選中的文本復(fù)制到剪切板。

  PasteFromClipboard用來(lái)把剪切板的內(nèi)容粘貼到Memo組件中光標(biāo)所在的位置。

  19)問(wèn):前面講了幾個(gè)控件,能把他們綜合起來(lái)編制一個(gè)程序嗎?

  答:好的,就利用剛才已經(jīng)放好的組件來(lái)編寫(xiě)一個(gè)用戶姓名錄入和顯示的程序。

  這個(gè)程序?qū)?shí)現(xiàn)當(dāng)在編輯框中輸入文本并按下Enter鍵后,文本就被增加到Memo組件中。因此需要給編輯框組件增加事件處理過(guò)程。

  當(dāng)用戶按下Enter鍵時(shí)產(chǎn)生了OnKeyPress事件,所以應(yīng)該編寫(xiě)這個(gè)事件的處理過(guò)程。

  選中組件Edit1,

  在對(duì)象觀察器上選擇Events標(biāo)簽頁(yè),

  雙擊Edit1的事件OnKeyPress,C++Builder將自動(dòng)生成這個(gè)事件處理程序的代碼模板。在里面編寫(xiě)如下代碼:

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)

{

AnsiString Temp("用戶姓名:");

if((Key==0xD) && !Edit1->Text.IsEmpty())

      Memo1->Lines->Add(Temp+Edit1->Text);

}

或者寫(xiě)成如下的格式更好理解,它們是一樣的。

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)

{

       AnsiString Temp="用戶姓名:";

       if((Key==VK_RETURN) && Edit1->Text!="")

      Memo1->Lines->Add(Temp+Edit1->Text);

}

  當(dāng)用戶輸入文本并且按下回車鍵后,第三條語(yǔ)句將Temp和用戶輸入的字符串合并后加到Memo控件文本的末尾。

  現(xiàn)在,點(diǎn)擊速度條上Run的按鈕,運(yùn)行這個(gè)程序,在編輯框中輸入一個(gè)用戶姓名,然后按回車鍵。用戶的姓名就被自動(dòng)加到了文本框的末尾。

  用鼠標(biāo)在Memo控件中點(diǎn)擊一下,將焦點(diǎn)移動(dòng)到它里面,然后按下Alt+N加速鍵,可以看出,標(biāo)簽控件將焦點(diǎn)移動(dòng)到了編輯框中。

20)問(wèn):BCB中有一個(gè)和寫(xiě)字板差不多的組件RichEdit,學(xué)習(xí)她主要注意那幾個(gè)屬性的呢?
   答:只要能夠把設(shè)置缺省字符格式DefAttributes、設(shè)置選中字符格式SelAttributes與設(shè)置段落Paragraph三個(gè)屬性掌握好就差不多了,因?yàn)樗钠渌鼘傩耘cMemo差不多。

    缺省字符格式DefAttributes、設(shè)置選中字符格式SelAttributes是TtextAttributes對(duì)象,它是用來(lái)控制字符格式的,它的Color、Height、Name、Size、Style、Pitch等性性和字體Tfont對(duì)象差不多,當(dāng)然還有一些象CharSet、ConsistentAttributes、Protected等一些不太常用的屬性。

    設(shè)置段落Paragraph是TparaAttributes對(duì)象,用來(lái)設(shè)置段落的對(duì)齊Alignment、首行縮進(jìn)FirstIndent、左縮進(jìn)LeftIndent、右縮進(jìn)RightIndent、編號(hào)方式Numbering、制表位Tab等屬性。

    段落的對(duì)齊Alignment的取值是taLeftJustify左對(duì)齊、taCenter居中和taRightJustify右對(duì)齊。

    編號(hào)方式Numbering,用來(lái)設(shè)置編號(hào)方式,取nsNone表示沒(méi)有編號(hào),取nsBulet表示采用懸掛縮進(jìn)方式編號(hào)。

    制表位Tab用來(lái)設(shè)置某個(gè)制表位所在的位置。其聲明為:_property int Tab[Byte Index]。第一個(gè)制表位為Tab[0],依次類推。

  注:本文的所有例程都在BCB6、WINXP下編譯通過(guò)。

3. 按鈕類組件
  
  21)問(wèn):在進(jìn)行Windows程序界面設(shè)計(jì)中,經(jīng)常會(huì)用到按鈕,在C++Builder中,按鈕一定是通過(guò)按鈕組件來(lái)實(shí)現(xiàn)的嗎?

答:是的,并且C++Builder的按鈕類組件十分豐富。BCB提供了兩類按鈕類組件:一類是執(zhí)行類按鈕,另一類是信息類按鈕。所謂執(zhí)行類按鈕是指它們通常用來(lái)啟動(dòng)程序運(yùn)行的,比如按鈕、位圖按鈕、加速按鈕。而信息類按鈕一般用來(lái)獲取信息,包括單選按鈕和復(fù)選框。靈活地使用各種按鈕,不僅可以使程序更加豐富多彩,而且可以提高程序的性能。

  22)問(wèn):那么按鈕組件有哪些常用的屬性和方法呢?

  答:對(duì)于按鈕組件,Caption屬性用來(lái)描述按鈕的標(biāo)題,也就是按鈕上顯示的文本,它與標(biāo)簽組件很相識(shí),我們同樣可以在這個(gè)屬性中為按鈕指定快捷鍵。

  當(dāng)Cancel屬性值為True時(shí),用戶無(wú)論何時(shí)按下Esc鍵,都會(huì)產(chǎn)生OnClick事件,當(dāng)窗體上有多個(gè)按鈕時(shí),Esc鍵觸發(fā)TabOrder值最小的那個(gè)按鈕的OnClick事件。它的缺省值為False

  當(dāng)Default屬性值為true時(shí),用戶無(wú)論何時(shí)按下Enter鍵時(shí),都會(huì)產(chǎn)生OnClick事件,與Cancel屬性不同的是,如果輸入焦點(diǎn)正好在一個(gè)按鈕上,那么會(huì)產(chǎn)生這個(gè)按鈕的OnClick事件。否則,產(chǎn)生TabOrder的值最小的那個(gè)按鈕的OnClick事件。它的缺省值為True

  Hint屬性保存著按鈕的提示內(nèi)容,當(dāng)用戶把鼠標(biāo)光標(biāo)停留在按鈕上時(shí),就會(huì)顯示提示信息。

  ShowHint屬性用來(lái)確定是否顯示提示文本,缺省值為False。

  按鈕常用的事件就是OnClick事件,OnClick事件在鼠標(biāo)單擊按鈕時(shí)產(chǎn)生,另外,通過(guò)快捷鍵、enter鍵和Esc鍵也可以產(chǎn)生OnClick事件,一般情況下,按鈕都需要增加OnClick事件處理程序。

  23)問(wèn):那么位圖按鈕又有什么特點(diǎn)呢?

  答:位圖按鈕BitBtn除了可以像普通按鈕那樣顯示文本外,還可以顯示圖形,除了具有一般按鈕所具有的全部屬性外,位圖按鈕還有一個(gè)特有的Kind屬性。這個(gè)屬性用來(lái)設(shè)定按鈕為幾種預(yù)定義圖形按鈕風(fēng)格中的哪一種。這是幾種預(yù)定義按鈕風(fēng)格。這些做好的按鈕如下表:
 

Kind屬性值

按鈕外觀

等價(jià)屬性設(shè)置

bkCustom

缺省值

用來(lái)給用戶制定

bkOK

Caption=”OK”

ModalResult=mrOK

Default=true

bkCancel

Caption=”Cancel”

ModalResult=mrCancel

Cancel=true

bkYes

Caption=”&Yes”

ModalResult=mrYes

Default=true

bkNo

Caption=”&No”

ModalResult=mrNo

Cancel=true

bkHelp

Caption=”&Help”

bkClose

Caption=”&Close”

bkAbort

Caption=”Abort”

ModalResult=mrAbort

bkRetry

Caption=”&Retry”

ModalResult=mrRetry

bkIgnore

Caption=”&Ignore”

ModalResult=mrIgnore

bkAll

Caption=”&All”

ModalResult=mrAll

  當(dāng)把Kind的屬性值設(shè)置為bkCustom時(shí),還可以給位圖按鈕指定其他的圖形,具體的方法是,在對(duì)象編輯器中選擇Glyph屬性,然后單擊Value列中的省略號(hào)按鈕,這時(shí)會(huì)出現(xiàn)一個(gè)圖形編輯對(duì)話框,要求指定位圖的位置。

  單擊Load按鈕,在文件打開(kāi)對(duì)話框中選擇一個(gè)位圖文件就可以了。要注意的是,如果選擇的位圖太大,位圖按鈕不會(huì)自動(dòng)調(diào)整其尺寸,這時(shí)你只能看到一部分的圖形。

  24)問(wèn):位圖按鈕組件的NumGlyph屬性有什么作用?

  答:屬性NumGlyph指出位圖按鈕使用的位圖的數(shù)目,當(dāng)你需要位圖按鈕使用多個(gè)位圖分別表示按下,彈起等不同狀態(tài)時(shí),必須保證這些位圖具有相同的尺寸,并且一個(gè)接著一個(gè)地水平排列著。

  在C++Builder中,一個(gè)位圖按鈕最多可有四個(gè)位圖,因此,NumGraph地取值范圍只能是1到4,C++Builder將根據(jù)位圖按鈕地狀態(tài)確定顯示哪個(gè)位圖。

  一般來(lái)說(shuō),當(dāng)按鈕未選中時(shí)顯示第一個(gè)位圖。

  當(dāng)按鈕不能選擇時(shí),顯示第二個(gè)位圖,

  當(dāng)按鈕被單擊時(shí)顯示第三個(gè)位圖,

  當(dāng)用戶釋放鼠標(biāo)鍵時(shí),又會(huì)重新顯示第一個(gè)位圖,

  當(dāng)沒(méi)有希望的位圖時(shí),那么所有地狀態(tài)都使用第一個(gè)位圖。

  25)問(wèn):快捷按鈕有哪幾個(gè)重要屬性?

  答:快捷按鈕與位圖按鈕很相似,也可以顯示圖像,但也有一些不同之處:快捷按鈕一般都比較小,缺省大小25*25,基本上都是只顯示圖像而不顯示文字,最大差別是,快捷可以保持在按下的狀態(tài),而其它兩類按鈕不能。快捷按鈕一般都是用來(lái)制作工具欄按鈕,這時(shí)要和Panel配合使用。下面來(lái)看一下它的重要屬性:

  AllowAllUp:設(shè)置一個(gè)組的快捷按鈕是否可以全部處于彈起的狀態(tài)。缺省為false,這時(shí)可以用來(lái)模擬單選按鈕,讓同一個(gè)組的總有一個(gè)按鈕處在按下?tīng)顟B(tài)。如果一個(gè)組中只有一個(gè)快捷按鈕,把這個(gè)屬性改為true,這時(shí)這個(gè)按鈕就可以在按下和彈起兩個(gè)狀態(tài)之間切換,可以用來(lái)模擬一個(gè)復(fù)選按鈕。

  Down:表示按鈕是否按下,若設(shè)為true,則處于按下的狀態(tài)。

  GroupIndex:用來(lái)把幾個(gè)這個(gè)屬性相同的快捷按鈕編為一組,即相同取值的按鈕為一組。缺省為0,表示這個(gè)按鈕不編成組。

  26)問(wèn):那么單選按鈕又有什么特點(diǎn)呢?

  答:?jiǎn)芜x按鈕RadioButton是相互排斥的一種選擇組件,在一組單選按鈕中用戶一次只能選取一個(gè)單選按鈕。

  雖然你可以只使用一個(gè)單選按鈕,但是那樣單選按鈕也就失去了意義。單選按鈕一般都是成組出現(xiàn)的。

  單選按鈕只有一個(gè)比較特殊的屬性Checked,它表示按鈕是否被選中。缺省情況下,Checked的屬性是False,表示按鈕未選中。

  另外單選按鈕也具備Caption屬性,這就意味著它也可以通過(guò)快捷鍵來(lái)選中。

  單選按鈕在成組使用時(shí)有一些特點(diǎn)需要掌握。當(dāng)你在同一容器(如:Form、Panel、GroupBox等)上直接放置單選按鈕時(shí),這些單選按鈕自成一組,也就是說(shuō),無(wú)論在容器上放置2個(gè)或者幾十個(gè)單選按鈕,它們都是一組的,每次只能選中它們中的某一個(gè)。

  27)問(wèn):如果我想在窗體上放置不止一組按鈕,應(yīng)該怎么辦?

  答:可以用兩種方法。一種是使用組合框(GroupBox),另一種是使用單選按鈕分組框(RadioGroup)。

  組合框顧名思義就是用來(lái)把許多組件組合起來(lái),使窗口變得整齊而有條理,每一組不同的按鈕使用一個(gè)組合框。在設(shè)計(jì)時(shí),首先把組合框放在窗體上,然后再把單選按鈕放在分組框上。要記住的是,放置次序不能顛倒。一旦把單選按鈕放在分組框中,那么這個(gè)單選按鈕就屬于這個(gè)組合框了,你無(wú)法把它從組合框中移走,如果刪除組合框的話,分組框中所有的單選按鈕也會(huì)被同時(shí)刪除。

  在實(shí)際應(yīng)用中,我們經(jīng)常使用單選按鈕分組框而不是單選按鈕。因?yàn)閱芜x按鈕分組框可以包含多個(gè)單選按鈕,而它實(shí)際上只是一個(gè)組件。這比使用分組框和多個(gè)單選按鈕更直觀和簡(jiǎn)單。

  28)問(wèn):?jiǎn)芜x按鈕分組框又有哪些特殊的屬性呢?

  答: 單選按鈕分組框有三個(gè)屬性是比較特殊的:

  屬性Items是類TStrings的一個(gè)對(duì)象,這一點(diǎn)與Memo組件中的Lines屬性很相似,但是它們的含義不同,Lines屬性包含Memo組件中顯示的每一行字符串,而Items屬性雖然也包含許多字符串,但是每一個(gè)字符串代表單選按鈕組中的一個(gè)單選按鈕。

  單擊Items屬性Value列中的省略號(hào)按鈕,可以打開(kāi)一個(gè)字符串編輯器,然后在這個(gè)編輯器中可以輸入單選按鈕的標(biāo)題。每個(gè)單選按鈕占用一行。

  Columns屬性決定著單選按鈕分組框內(nèi)分欄的數(shù)目,默認(rèn)是1,最多可以有16欄,即16列。

  ItemIndex屬性為單選分組框中被選中項(xiàng)的序號(hào)。-1表示不指向任何一個(gè)項(xiàng)。

  29)問(wèn):復(fù)選按鈕(CheckBox)有什么作用?

  答:復(fù)選按鈕與單選按鈕不同,你可以一次選擇多個(gè)復(fù)選按鈕。復(fù)選按鈕有幾個(gè)比較重要的屬性。

  Alignment屬性控制復(fù)選框標(biāo)題的位置。

  taRightJustify
  標(biāo)題出現(xiàn)在復(fù)選框的右邊
  
  taLeftJustify
  標(biāo)題出現(xiàn)在復(fù)選框的左邊

  缺省值為taRightJustify。

  AllowGrayed屬性決定復(fù)選框是否可以處于灰色的狀態(tài),當(dāng)屬性值為True時(shí),復(fù)選框有三種狀態(tài),選中、未選中、和灰色;當(dāng)屬性值為False時(shí),復(fù)選框只有兩種狀態(tài)。缺省值為false。

  Checked屬性確定復(fù)選框是否被選中。缺省值為false。

要知道復(fù)選框是選中狀態(tài)、未選中狀態(tài)還是灰色狀態(tài)。,可以在運(yùn)行的時(shí)候,用程序讀取運(yùn)行時(shí)態(tài)變量State的值,缺省值為cbUnChecked。

  雖然復(fù)選框之間并不互相排斥,也就是說(shuō),直接放置在窗體上的每一個(gè)復(fù)選按鈕相互之間都不干擾,但是最好還是把復(fù)選框分組使用。這樣做的好處是便于用戶理解。

  30)問(wèn): CheckBox、RadioButton如何完成動(dòng)態(tài)改變其按鈕的標(biāo)題? RadioGroup能動(dòng)態(tài)添加吧?讀取上面三個(gè)組件標(biāo)題又如何做呢?
  答:CheckBox、RadioButton的屬性里有一個(gè)Caption,它的屬性值就是按鈕的標(biāo)題,所以應(yīng)該說(shuō)對(duì)這兩個(gè)組件來(lái)說(shuō)很容易做到的:

  CheckBox1->Caption=”信息”;

  Label1->Caption= CheckBox1->Caption;

  RadioButton與CheckBox一樣,這里就不多說(shuō)了。

  而RadioGroup里面有一個(gè)Items屬性,這在《閑談BCB》中說(shuō)過(guò)這個(gè)問(wèn)題,所以你要添加按鈕,可以用下面的方法:

  RadioGroup1->Items->Add(“我是新來(lái)的”);

  讀取可以利用ItemsIndex來(lái)完成:

  Label1->Caption=RadioGroup1->Items->Strings[RadioGroup1->ItemIndex];

  String是把選中的序號(hào)轉(zhuǎn)換成你需要的文本,因?yàn)镮tems是Tstring對(duì)象,這類情況在你以后的學(xué)習(xí)中會(huì)經(jīng)常看到的。

  要注意在RadioGroup中也有一個(gè)Caption,這是用來(lái)給單選分組框設(shè)置標(biāo)題的,這個(gè)標(biāo)題與單選的文字無(wú)關(guān)。

4.列表類組件
  31)問(wèn):當(dāng)我需要使用多個(gè)選項(xiàng)的時(shí)候,使用單選按鈕或復(fù)選框來(lái)進(jìn)行選擇不是很恰當(dāng),因?yàn)樵诖绑w上放置大量的按鈕既不利于布局的美觀,又會(huì)消耗大量的系統(tǒng)資源,C++Builder有什么解決辦法嗎?

答:可以使用列表框(ListBox、CheckListBox)或組合框(ComboBox)這兩類最常用的列表組件。

  32)問(wèn):列表框有那些主要屬性?

  答:列表組件ListBox在缺省情況下,只能進(jìn)行單項(xiàng)選擇,當(dāng)屬性MultiSelected為True時(shí),可以進(jìn)行多項(xiàng)選擇。這時(shí)你只要單擊想要的選項(xiàng),那么這些選項(xiàng)都會(huì)被選中。



  Items屬性:列表框中的所有選項(xiàng)都是通過(guò)這個(gè)屬性來(lái)進(jìn)行訪問(wèn)的。設(shè)置時(shí)只要點(diǎn)擊Items右邊的“…”就可以編輯了。

  當(dāng)屬性ExtendedSelect也等于True時(shí),有兩種方法可以進(jìn)行多項(xiàng)選擇。一種是單擊選項(xiàng)同時(shí)按下Ctrl鍵,這樣可以選中兩個(gè)選項(xiàng)之間的所有選項(xiàng)。它的缺省值為False。

  Sorted屬性確定列表框中顯示的內(nèi)容書(shū)否按照字母順序排列。缺省值為False。

  當(dāng)不允許多項(xiàng)選擇時(shí),我們通過(guò)屬性ItemIndex就可以返回被選中的選項(xiàng)。但是,如果打開(kāi)了多項(xiàng)選擇,那么屬性ItemIndex只返回最后個(gè)被選中的選項(xiàng)序號(hào)(有些書(shū)上也說(shuō)返回選中選項(xiàng)中具有輸入焦點(diǎn)的選項(xiàng)序號(hào),但我覺(jué)得這種說(shuō)法有點(diǎn)不易讓初學(xué)者理解)。

  SelCount屬性在MultiSelected屬性為True時(shí),指出了列表框中被選中項(xiàng)目的個(gè)數(shù)。當(dāng)MultiSelected屬性為False時(shí),它的值為-1。

  Selected屬性指出了列表框中的某個(gè)項(xiàng)目是否被選中。

  TcheckListBox是從TcustomListBox繼承下來(lái)的的,TListBox也是直接從TcustomListBox繼承下來(lái)的,因此這兩個(gè)組件是兄弟關(guān)系,它們的屬性和使用都非常相似。下面來(lái)看看它的不同之處:

  AllowGrayed屬性和多選按鈕一樣,當(dāng)屬性值為True時(shí),則列表框中的選項(xiàng)有三種狀態(tài):選中、未選中和選中但變灰;當(dāng)屬性值為False時(shí),列表框只有兩種狀態(tài)。缺省值為false。

  Checked其聲明為:_property  bool  Checked[int Index];這個(gè)屬性用來(lái)返回或者設(shè)置列表框中的指定選項(xiàng)是否被選中。其中參數(shù)Index表示指定的選項(xiàng)的序號(hào)。

  32)問(wèn):那么,組合框和列表框相比有什么相似之處和不一樣的地方呢?

  答:首先,從外觀上來(lái)說(shuō),列表框占據(jù)了比較大的空間,而組合框只需要一行的空間就可以了。從另一方面來(lái)說(shuō),組合框還帶有一個(gè)編輯框,用戶可以直接在編輯框中輸入文本,組合框在一般情況下只顯示這個(gè)編輯框,當(dāng)用戶單擊組合框右邊的下拉箭頭時(shí),就會(huì)顯示一個(gè)包含所有選項(xiàng)的下拉列表。
  
  組合框和列表框最大的不同是組合框不能進(jìn)行多項(xiàng)選擇。

  組合框與列表框有一定的相似之處,就是它們都能夠包含許多的選項(xiàng)。但是組合框還是有不少獨(dú)特的屬性。

  33)問(wèn):組合框有哪些常用屬性及事件呢?

  答:屬性Style決定著組合框的樣式,C++Builder為組合框定義了五種不同的樣式。

  CsDropDown:這時(shí)為一個(gè)標(biāo)準(zhǔn)的組合框,由一個(gè)編輯框和下拉列表組成。

  CsDropDownList:與標(biāo)準(zhǔn)組合框相似,但不能在編輯框中輸入文本。

  CsSimple:沒(méi)有下拉列表的組合框,只是一個(gè)編輯框,也就是說(shuō)只能輸入不能選擇。

  csOwnerDrawFixed和csOwnerDrawVariable這兩種樣式的組合框常用于需要圖像作為項(xiàng)目時(shí),當(dāng)然你輸入字符串也可以。前面一種樣式組合框中各個(gè)項(xiàng)目的高度是固定的,而后面一種樣式的高度可以變化,也就是說(shuō),各個(gè)項(xiàng)目的高度可以不一樣,此外,在這兩種樣式中,編輯框是不可輸入的。

  Text屬性用來(lái)設(shè)置或者返回組合框中顯示出來(lái)的文本內(nèi)容。

  當(dāng)編輯框中的內(nèi)容發(fā)生變化時(shí)將觸發(fā)OnChange事件。所以在組合框里我們用的就是它。

  注意下面四段兩組語(yǔ)句的區(qū)別與聯(lián)系:

  //………………第一組

  void _fastcall TForm1::ComboBox1Change(TObject *Sender)

  {

  if(ComboBox1->Text!=””)

  Edit1->Font->Size=StrToInt(ComboBox1->Text);

  }

  上面的代碼還可以寫(xiě)成下面的樣子,它們的作用是一樣的:

  void _fastcall TForm1::ComboBox1Change(TObject *Sender)

  {

  if(!ComboBox1->Text.IsEmpty())

  Edit1->Font->Size= ComboBox1->Text.ToInt();

  }

  //………………第二組

  void _fastcall TForm1::ComboBox2Change(TObject *Sender)

  {

  Edit1->Font->Name= ComboBox2->Text;

  }

  也可以用下面的代碼,它們?cè)谶@里是等價(jià)的:

  void _fastcall TForm1::ComboBox2Change(TObject *Sender)

  {

  Edit1->Font->Name= ComboBox2->Items->String[ComboBox2->ItemIndex];

  }

  我想通過(guò)對(duì)比,你會(huì)明白這些語(yǔ)句的區(qū)別與聯(lián)系的,什么時(shí)候用什么樣的語(yǔ)句,細(xì)細(xì)品味一下你就會(huì)明白了。

  34)問(wèn):前面您提到了面板組件,它是一種什么類型的組件?

  答:它是一種容器組件,容器組件是可以包含其他組件的組件,最典型的容器組件就是窗體。其他比較常用的容器組件有面板(Panel)、組合框(GroupBox)。

  面板組件可以容納其他組件。任何放置在面板上的組件都會(huì)成為面板的子組件,當(dāng)你刪除面板組件時(shí),放置在面板上的其他組件也同時(shí)被刪除了,這是容器組件的共同特點(diǎn)。

  面板組件沒(méi)有什么特別的屬性,只有BevelInner(面板內(nèi)部斜面),BevelOuter(面板外部斜面),BevelWidth(斜面寬度,單位像素),BorderStyle(邊界風(fēng)格)和BorderWidth(邊界寬度)幾個(gè)屬性有一些特點(diǎn)。這些屬性的任意組合可以生成各種效果的邊框。你可以設(shè)置這幾個(gè)屬性的值,可以得到不同的面板效果。

  其中BevelInner(面板內(nèi)部斜面),BevelOuter(面板外部斜面)的屬性值是一樣的:bvNone(缺省值)表示沒(méi)有斜面;

  bvLowered表示為沉降的斜面;

  bvRaised表示為上升的斜面。

  組合框(GroupBox)屬性中你只要設(shè)置好Caption就可以了,它是標(biāo)題的名稱,表示此組合框類別、功能、選項(xiàng)等。GroupBox1為默認(rèn)名稱。

  5.特殊的輸入控制類組件
  35)問(wèn):C++Builder有哪些輸入控制類組件?

  答:C++Builder輸入控制類組件主要包括滾動(dòng)條(ScrollBar)、軌跡條(TrackBar)、進(jìn)程條(ProgressBar)以及加減組件UpDown,它們都可以實(shí)現(xiàn)邊續(xù)范圍內(nèi)數(shù)值的選擇。

  36)問(wèn):滾動(dòng)條主要用在什么地方,它又有哪些常用屬性呢?

  答:滾動(dòng)條是常見(jiàn)的組件,它經(jīng)常出現(xiàn)在列表框、Memo等組件中。這時(shí),它是作為這些組件的一部分而存在的。其實(shí)滾動(dòng)條還可以單獨(dú)使用,單獨(dú)使用時(shí),滾動(dòng)條一般用來(lái)控制連續(xù)的數(shù)值輸入。象調(diào)節(jié)音量等,都可以使用滾動(dòng)條輸入。

  滾動(dòng)條有這樣一些常用屬性

  1.Position:這個(gè)屬性用來(lái)設(shè)置或者返回當(dāng)前流動(dòng)條中滑塊的位置。屬性Max,Min,用來(lái)設(shè)置滾動(dòng)條可以滾動(dòng)的最大或最小位置。當(dāng)Position等于Max時(shí),滾動(dòng)塊位于滾動(dòng)條的最右端;當(dāng)Position等于Min時(shí),滾動(dòng)塊位于滾動(dòng)條的最左端。當(dāng)Position等于Max和Min之間的某一個(gè)值時(shí),滾動(dòng)塊位于滾動(dòng)條中間的某個(gè)位置。

  2.屬性Kind。屬性Kind有兩個(gè)可能的取值:sbHorizontal(缺省值)和sbVertical,分別表示水平滾動(dòng)條和垂直滾動(dòng)條。

  3.屬性SmallChange決定當(dāng)用戶單擊滾動(dòng)條兩端的箭頭按鈕時(shí)滾動(dòng)塊移動(dòng)的距離。

  4.屬性LargeChange確定當(dāng)用戶單擊滾動(dòng)塊兩邊的空白或按下PgUp和PgDn鍵時(shí),滾動(dòng)塊移動(dòng)的距離。屬性LargeChange和SmallChange的取值范圍是1到32767。


 37)問(wèn):滾動(dòng)條能夠響應(yīng)哪些常用事件呢?

  答:滾動(dòng)條的常用事件是OnChange,只要屬性Position的值發(fā)生改變都會(huì)產(chǎn)生這個(gè)事件。一般情況下,了解滾動(dòng)條的這個(gè)屬性就可以了。

  但是有時(shí)候可能需要更詳細(xì)地了解用戶單擊了滾動(dòng)條的哪個(gè)位置,這時(shí)就需要響應(yīng)OnScroll事件,其聲明為:-_property TScrollEvent OnScroll;其中TscrollEvent的聲明為:typedef void fastcall (closuer TScrollEvent)(System::Tobject Sender,TscrollCode ScrollCode,int &ScrollPos); OnScroll事件處理程序帶有三個(gè)參數(shù):

  其中參數(shù)Sender指出了是哪個(gè)對(duì)象發(fā)送了這個(gè)消息,參數(shù)ScrollPos指出了滾動(dòng)塊的位置,參數(shù)ScrollCode返回滾動(dòng)條的狀態(tài),這些狀態(tài)是用這樣一些參數(shù)值表示的,

  scLineUp
  表示用戶單擊了滾動(dòng)條左端的箭頭按鈕(水平滾動(dòng)條)或上端的箭頭按鈕(垂直滾動(dòng)條)。
  
  scLineDown
  表示用戶單擊了滾動(dòng)條右端的(水平滾動(dòng)條)或下端的箭頭按鈕(垂直滾動(dòng)條)。
  
  scPageUp
  表示用戶單擊了滾動(dòng)塊左邊(水平滾動(dòng)條)或上邊(垂直滾動(dòng)條)的區(qū)域。
  
  scPageDown
  表示用戶單擊了滾動(dòng)塊右邊(水平滾動(dòng)條)或下邊(垂直滾動(dòng)條)的區(qū)域。
  
  scPosition
  表示用戶移動(dòng)了滾動(dòng)條但是已經(jīng)釋放了。
  
  scTrack
  表示用戶正在移動(dòng)滾動(dòng)塊。
  
  scTop
  表示用戶把滾動(dòng)塊移動(dòng)到了滾動(dòng)條的左端(水平滾動(dòng)條)或頂端(垂直滾動(dòng)條)。
  
  scBottom
  表示用戶把滾動(dòng)塊移動(dòng)到了滾動(dòng)條的右端(水平滾動(dòng)條)或下端(垂直滾動(dòng)條)。
  
  scEndScroll
  表示用戶結(jié)束了移動(dòng)滾動(dòng)塊的操作,釋放了鼠標(biāo)或者鍵盤按鍵。

posted on 2007-06-29 11:13 東東會(huì)會(huì) 閱讀(3969) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C++Builder 基礎(chǔ)

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲国产精品传媒在线观看 | 久久精品国产69国产精品亚洲| 一个人看的www久久| 亚洲天天影视| 亚洲国产成人一区| 亚洲色图自拍| 国产精品久久久久久超碰| 亚洲视频axxx| 久久久成人网| 这里只有精品在线播放| 欧美在线视频播放| 91久久夜色精品国产九色| 亚洲视屏在线播放| 久久久久9999亚洲精品| 久久久久久久综合日本| 久久人人爽国产| 99re这里只有精品6| 国产一区二区三区免费观看| 欧美电影免费观看大全| 亚洲女性裸体视频| 久久亚洲综合色一区二区三区| 一区三区视频| 99国产精品视频免费观看一公开| 亚洲男人的天堂在线| 欧美日本中文字幕| 麻豆精品网站| 在线国产精品播放| 亚洲国产精品久久久久秋霞不卡 | 亚洲高清一二三区| 欧美久久久久免费| 国模大胆一区二区三区| 西瓜成人精品人成网站| 久久香蕉国产线看观看网| 亚洲精品综合精品自拍| 久久一区二区三区av| 亚洲一本视频| 国产精品在线看| 亚洲一区二区在线观看视频| 亚洲毛片在线看| 欧美日韩国产限制| 正在播放欧美一区| 亚洲一区久久| 久久频这里精品99香蕉| 国产亚洲欧洲一区高清在线观看| 欧美va亚洲va日韩∨a综合色| 久久一区二区三区国产精品 | 亚洲伦理自拍| 亚洲一区在线视频| 亚洲欧美成人综合| 欧美日韩hd| 亚洲精品视频在线观看免费| 亚洲国产毛片完整版| 亚洲一区二区三区精品在线观看| 影音先锋日韩资源| 午夜精品影院| 夜夜嗨av一区二区三区免费区| 亚洲曰本av电影| 国产精品女主播一区二区三区| 欧美高清自拍一区| 一区二区三区久久精品| 国产伊人精品| 国产精品a久久久久| 蜜月aⅴ免费一区二区三区| 亚洲在线免费视频| 亚洲精品久久久久久久久| 亚洲免费网址| 亚洲制服av| 亚洲国产美女久久久久 | 亚洲人成亚洲人成在线观看| 亚洲人体一区| 国内精品视频在线观看| 久久综合一区二区| 亚洲成色999久久网站| 亚洲一区日本| 亚洲激情专区| 国产精品视频yy9099| 亚洲在线网站| 国产乱码精品一区二区三区五月婷| 亚洲二区在线视频| 午夜精品美女久久久久av福利| 欧美一区二区三区久久精品| 亚洲欧美变态国产另类| 亚洲一区二区欧美日韩| 亚洲欧美成人网| 亚洲欧美影院| 久久激情五月丁香伊人| 久久国产加勒比精品无码| 亚洲国产精品一区二区三区 | 久久精品一区二区三区中文字幕| 欧美日本高清视频| 狠狠色综合一区二区| 国产欧美日韩免费| 欧美在线短视频| 亚洲精品久久嫩草网站秘色| 国产日韩欧美在线播放不卡| 欧美精品性视频| 亚洲日韩视频| 亚洲久久成人| 亚洲国产精品专区久久| 欧美人与性动交a欧美精品| 欧美三级午夜理伦三级中文幕| 欧美久久一级| 国产一区二区你懂的| av成人天堂| 六月天综合网| 久久精品动漫| 欧美欧美天天天天操| 国产亚洲精品aa| 欧美日韩一级视频| 国产欧美精品一区| 久久精品亚洲一区| 猛男gaygay欧美视频| 中文亚洲视频在线| 亚洲欧美激情在线视频| 国产精品v欧美精品v日韩精品| 国产欧美一区二区精品性色| 在线看国产日韩| 欧美在线观看一区二区| 日韩亚洲国产精品| 久久久久久久精| 一区二区三区福利| 香港成人在线视频| 一区福利视频| 欧美精品一区二区久久婷婷| 亚洲人成精品久久久久| 亚洲欧美日韩高清| 激情一区二区三区| 美女网站在线免费欧美精品| 91久久综合| 香蕉国产精品偷在线观看不卡| 国产精品一区在线观看你懂的| 久久久精品国产99久久精品芒果| 亚洲高清色综合| 亚洲在线日韩| 亚洲第一中文字幕在线观看| 欧美另类高清视频在线| 欧美一区影院| 99在线精品观看| 久久综合久色欧美综合狠狠| 亚洲精品一区在线观看| 国产美女扒开尿口久久久| 欧美成人高清| 香蕉久久夜色精品国产| 亚洲精品一区二区三区四区高清 | 久久精品观看| 亚洲国产一区二区精品专区| 欧美三级午夜理伦三级中视频| 久久国产精品99国产精| 亚洲一区二区三区免费观看| 亚洲盗摄视频| a4yy欧美一区二区三区| 欧美本精品男人aⅴ天堂| 亚洲一区二区三区乱码aⅴ| 伊人蜜桃色噜噜激情综合| 欧美视频中文一区二区三区在线观看 | 午夜久久久久久久久久一区二区| 欧美激情视频在线播放| 久久国产精品免费一区| 一区二区高清| 亚洲国产精品小视频| 国产综合色产在线精品| 欧美色图天堂网| 免费久久99精品国产| 欧美中日韩免费视频| 亚洲综合日韩| 亚洲午夜精品久久久久久浪潮| 亚洲黄色尤物视频| 裸体一区二区| 久色婷婷小香蕉久久| 久久米奇亚洲| 久久成人羞羞网站| 欧美伊人精品成人久久综合97| 一区二区三区视频在线| 99视频国产精品免费观看| 亚洲美女视频在线观看| 亚洲精品乱码久久久久久黑人| 亚洲高清一二三区| 伊人狠狠色j香婷婷综合| 悠悠资源网久久精品| 国外成人在线视频| 亚洲大片在线| 亚洲激情小视频| 91久久夜色精品国产网站| 亚洲精品视频在线播放| 亚洲精品女av网站| 在线一区二区三区四区| 一道本一区二区| 在线一区视频| 亚洲欧美另类国产| 久久av一区| 美日韩精品视频| 亚洲激情影院| 亚洲视频一区二区免费在线观看| 在线综合亚洲| 久久激情综合| 久久不射中文字幕| 麻豆精品在线观看| 亚洲国产成人tv| 亚洲最新色图| 欧美一区二区三区免费观看|