程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++ Builder初學問與答2

C++ Builder初學問與答2

編輯:C++入門知識

  2.文本輸入組件

  11)問:如果要實現文本輸入,在C++Builder中應該怎麼辦?

  答:C++Builder常用文本輸入組件來實現,常用的文本輸入組件有Edit、MaskEdit 、Memo和RichEdit。他們的主要不同在於Edit和MaskEdit用於輸入單行文本,而Memo和RichEdit可以輸入多行文本。此外Label組件也可用來進行文本顯示。

  Edit和MaskEdit是一個窗口控件,它可以獲得輸入焦點。當用戶需要輸入單行文本時,就應該使用編輯框。它通常與標簽組件一起使用。

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

  答:編輯框常用的幾個屬性如下:

  Text屬性是一個String類型的數據,它決定了在編輯框中出現的文本字符串。在編程中,我們經常要通過text屬性獲取編輯框中的文本字符串

  MaxLength是一個Integer類型的數據,它指定編輯框所能容納的最大字符數。缺省情況下為0,表示長度不限。

  編輯框還可以用做口令輸入。具體方法是,把PasswordChar屬性設置為除#0之外的任何字符。這時,無論你在編輯框中輸入什麼字符,都只顯示PasswordChar包含的字符。我們經常把PasswordChar設置為星號*,當用戶輸入口令時只顯示星號。如輸入#0表示編輯框正常顯示。PasswordChar是一個字符類型的數據。

  如果要限制用戶對編輯框寫的權利。可以使用屬性ReadOnly,當ReadOnly的值為True時只讀。

  13)問:標簽控件(Label)起什麼作用?

  答:標簽的常用屬性有Caption和FocusControl。

  Caption屬性是字符串類型,用來指定標簽的標題,也就是標簽的顯示內容。

  FocusControl屬性是窗口控件類,用來指定一個與標簽相連的窗口控件。從而允許這個控件使用快捷鍵來獲得輸入焦點。

  標簽是一個典型的非窗口控件,它不能獲得輸入焦點,所以經常被用來給一些沒有Caption屬性的組件做標簽。標簽還能同時給這些組件提供快捷鍵的功能,允許用戶通過快捷鍵獲得輸入焦點。

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

  答:下面舉個例子說吧(這個例子在第19問中會用到):

  首先在輸入標題時需要指定一個快捷鍵,這可以用在一個字母前面加上一個連字符&來實現。單擊caption屬性輸入欄,輸入&N姓名,這裡字母N就被指定為快捷鍵,要注意的是中文是不能被指定為快捷鍵的,只有26個英文字母才可以。

  然後,把標簽的FocusControl屬性與編輯框Edit1相連,選擇FocusControl屬性,從屬性值字段列舉的窗體上所有的窗口控件中選取Edit1。這樣當用戶按下Alt+N時,輸入焦點就會轉移到編輯框Edit1。

  15)問:我遇到一些程序,當在編輯中輸入完文本後,按一下回車鍵,程序就開始執行了,C++Builder應該怎樣實現?

  答:當然可以。當我們按下回車鍵時,產生了OnKeyPress事件。所以如果要在程序中處理這種事件,這就要編寫OnKeyPress事件處理程序。

  還有三種事件是編輯框常用的事件:OnChange事件、OnEnter事件和OnExit事。每當編輯框中的文本發生改變時都會觸發OnChange事件。當編輯框獲得輸入焦點時會觸發OnEnter事件,而失去焦點時會產生OnExit事件。

  16)問:簡單說一下Memo組件的重要屬性?

  答: Memo與Edit的屬性有很多相似的,下面只來說一下Memo組件的重要屬性。

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

  在設計階段,如果要給Memo組件增加一些顯示內容,可以在對象編輯器中選擇屬性Lines,單擊Value列上的省略號按鈕,這時會打開一個字符串編輯窗口。

  在這個編輯器中輸入文本。編輯器中顯示的所有內容都會出現在Memo組件中。

  Memo組件屬性中:

  Alignment 用來確定Memo組件中顯示文本的對齊方式。

  WordWrap 確定文本到達右邊界時是否自動換行

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

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

  屬性ScrollBar是一個常見的屬性,它確定著滾動組件滾動條的行為。ScrollBar有四種可能的取值:

  SsNone 表示沒有滾動條;

  ssHorizonal 表示只有水平滾動條;

  ssVertical 表示只有垂直條;

  SsBoth 表示既有水平滾動條也有垂直滾動條。

  當顯示的內容比較多時,應該選擇ssBoth,這樣才能夠使用戶看到所有的內容。

  17)問:要在程序運行期間修改Memo組件的顯示內容,應該怎麼辦?

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

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

  要尋找Memo中的某一行,可以使用Lines->Strings[n]的形式,不過要注意Lines的字符串是從0開始的,所以在與Memo中的實際行號對應時,行號需要減一。

  18)問:如果我要實現文本的剪切、復制和粘貼,應該怎麼辦?

  答:Memo組件提供了三個用來完成剪切、復制和粘貼的方法。CutToClipboard用來把Memo組件中被選中的文本剪切到剪切板。

  CopyToClipboard用來把Memo組件中被選中的文本復制到剪切板。

  PasteFromClipboard用來把剪切板的內容粘貼到Memo組件中光標所在的位置。

  19)問:前面講了幾個控件,能把他們綜合起來編制一個程序嗎?

  答:好的,就利用剛才已經放好的組件來編寫一個用戶姓名錄入和顯示的程序。

  這個程序將實現當在編輯框中輸入文本並按下Enter鍵後,文本就被增加到Memo組件中。因此需要給編輯框組件增加事件處理過程。

  當用戶按下Enter鍵時產生了OnKeyPress事件,所以應該編寫這個事件的處理過程。

  選中組件Edit1,

  在對象觀察器上選擇Events標簽頁,

  雙擊Edit1的事件OnKeyPress,C++Builder將自動生成這個事件處理程序的代碼模板。在裡面編寫如下代碼:

  

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
   AnsiString Temp("用戶姓名:");
   if((Key==0xD) && !Edit1->Text.IsEmpty())
     Memo1->Lines->Add(Temp+Edit1->Text);
}
或者寫成如下的格式更好理解,它們是一樣的。
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
   AnsiString Temp="用戶姓名:";
   if((Key==VK_RETURN) && Edit1->Text!="")
     Memo1->Lines->Add(Temp+Edit1->Text);
}

  當用戶輸入文本並且按下回車鍵後,第三條語句將Temp和用戶輸入的字符串合並後加到Memo控件文本的末尾。現在,點擊速度條上Run的按鈕,運行這個程序,在編輯框中輸入一個用戶姓名,然後按回車鍵。用戶的姓名就被自動加到了文本框的末尾。

  用鼠標在Memo控件中點擊一下,將焦點移動到它裡面,然後按下Alt+N加速鍵,可以看出,標簽控件將焦點移動到了編輯框中。

  20)問:BCB中有一個和寫字板差不多的組件RichEdit,學習她主要注意那幾個屬性的呢?

  答:只要能夠把設置缺省字符格式DefAttributes、設置選中字符格式SelAttributes與設置段落Paragraph三個屬性掌握好就差不多了,因為她的其它屬性與Memo差不多。

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

  設置段落Paragraph是TparaAttributes對象,用來設置段落的對齊Alignment、首行縮進FirstIndent、左縮進LeftIndent、右縮進RightIndent、編號方式Numbering、制表位Tab等屬性。

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

  編號方式Numbering,用來設置編號方式,取nsNone表示沒有編號,取nsBulet表示采用懸掛縮進方式編號。

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

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved