C++ Builder初學問與答1

一直以來都想寫一點爲BCB初學者快速入門的東西,前不久寫了幾篇《閒談BCB》想把自己學習BCB中如何來解決難點的方法說給大家,沒想到被罵得不成樣子。本想不寫了,但覺得這些東西留下來能做什麼呢?還是用另一種方法來重新演譯我的思維吧,最近有些忙,那幾篇沒有寫完的文章,我也會盡快寫完的,至於《深入QR》,我想我一定會用另一種手法來寫,讓你一看就會把QR這個嬌女的所有衣服都脫光,不整理到這個地步,我是不敢輕易再拿出來,還請朋友見諒!

本文分爲《基礎入門》、《快速提高》與《成功編程者》三部分。

第一部分:基礎入門

1.窗體
1) 問:Windows的編程就是在窗體的基礎上實現的, C++Builder是怎樣處理窗體的呢?
  答:窗體的一部分功能通過窗體的屬性來實現,窗體的屬性非常多,這裏只對其中比較重要的屬性進行介紹。

  1. ActiveControl指定窗體上的某個組件爲輸入焦點。如下面的語句將窗體上的Label1組件成爲輸入焦點:ActiveControl=Label1。在同一時時刻,應用程序只能有一個輸入焦點。
  2. BorderIcons用來設定標題欄上出現哪些系統圖標。它是一個集合,可以設成以下幾個類型:最大化按鈕(biMaximize)、最小化按鈕(biMinimize)、幫助按鈕(biHelp)和系統菜單(biSystemMenu)。
  3. Icon屬性用來指定當窗體最小化時顯示的圖標。
  4. KeyPreview屬性爲true時,表示擊鍵事件發生時先傳給窗體,然後再傳給有輸入焦點的組件上,相當於窗體截獲了原本屬於組件的事件。缺省值爲false,表示擊鍵事件只送到當前有輸入焦點的組件上。
  5. Menu屬性用來指定窗體的主菜單。
  6. Visible屬性用來確定窗體是否可見。

此外還有一些運行時態屬性,這些屬性只有在程序運行的時候才能通過編程訪問。這種屬性主要有:
Active 屬性用來確定窗體是否獲得輸入焦點。
ActiveMDIChild 這個函數將返回當前活動的子窗體。
DropTarget 屬性用來指定窗體是否是拖放操作的對象。
Parent 屬性用來設定包含窗體的窗口控件,通常是另一個窗體。如果窗體沒有包含它的控件,那麼它的Parent屬性爲nil。

2)
問: Windows窗體有很多樣式,比如對話框,彈出窗口。如果我要控制窗體的邊界樣式,應該怎麼辦?
答:屬性BorderStyle可以指定窗體邊界的外觀和行爲。它一共有六種可能的取值。
bsDialog 表示大小不可變的標準的對話框邊界。
bsSingle 表示大小不可變的單線邊界。
bsNone 表示大小不可變、沒有邊界。
bsSizeable 表示標準的可改變大小的窗體。
bsToolWindow 與bsSingle時類似,但是標題較小,用做工具框窗口。
bsSizeToolWin與bsSizeable時相似,但是標題較小,做工具框窗口。
要注意的是,對於MDI子窗體,bsDialog或bsNone將不起作用。

3) 問:同樣是獲得焦點,ActiveControl與SetFocus()有什麼不同?
答: ActiveControl是把焦點交給組件,它是一個屬性。而SetFocus()是組件主動要焦點,是一個方法。書寫格式也不一樣。例如,我們想使同樣的一個Button1獲得焦點,可以下的兩種寫法:
ActiveControl=Button1或Button1=SetFocus()
二者作用是一樣的,不過一般都習慣用第一種方式。

4) 問:屬性FormStyle有什麼作用?
答:屬性FormStyle可以確定窗體的類型,它一共有四種屬性值。
fsNormal 表示窗體既不是MDI父窗口也不是MDI子窗口,只可能是單文檔SDI窗口或者對話框。這個屬性值是缺省值。
fsMDIChild 表示這個窗體是一個MDI子窗口。
fsMDIForm 表示這個窗體是一個MDI父窗口。
fsStayOnTop 表示窗體始終保持在窗體所屬工程中其它窗體的上面,除非還有別的窗體的FormStyle屬性也被設置成了fsStayOnTop。
要特別注意的是,在程序運行期間不要修改窗體的FormStyle屬性。

5) 問:屬性Position有什麼作用?
答:屬性Position可以確定程序運行時出現在屏幕上的窗體的大小和位置,它有五種可能的取值。
1.poDesigned表示使用設計時指定的尺寸和位置屬性時顯示窗體。尺寸屬性是指Height和Width,位置屬性是指Left和Top。這個屬性值是缺省值。
2.poDefault表示窗體在屏幕上顯示的位置和大小由Windows決定。每次運行應用程序時,窗體都會稍微向下向右移動。
3.poDefaultPosOnly表示窗體以設計時的窗體尺寸顯示窗體,但是在屏幕上顯示的位置由Windows確定。每次運行應用程序時,窗體都會稍微向下向右移動。當無法再向下移動時,就又會從屏幕的左上角開始顯示。
4.poDefaultSizeOnly表示窗體的位置由設計時指定的值確定,而尺寸由Windows確定。
5.poScreenCenter表示使用設計時指定的尺寸和位置屬性,在屏幕的中央顯示窗體。

6) 問:如何最大化或最小化窗體?
答:屬性WindowState與窗體的顯示有關,它有三種可能的取值。
wsNormal 窗體既不是最大化顯示也不是最小化顯示。這個值是缺省值。
wsMinimized 窗體最小化顯示。
wsMaximized 窗體最大化顯示。

7) 問:屬性ClientHeight和ClientWidth有什麼作用?
答:這兩個屬性用來定義窗體用戶區域的高和寬。所謂用戶區域窗體的實際工作區域,就是除了窗體的標題欄、菜單條、工具條和狀態條以及邊框之外的窗體區域。所以對於新創建的窗體,它的用戶區域比窗體的大小要稍微小一些,相對而言,窗體的大小是由屬性Height和Width確定的。

8) 問:如何動態創建一個窗體呢?
答:我們先創建一個主窗體MainForm,把她的Caption改爲“主窗體”,把FormStyle屬性改爲fsMDIForm。再創建一個子窗體windows1,把Caption改爲“子窗體”,把FormStyle屬性改爲fsMDIChild。
選擇“Project|Options…”菜單項,將會彈出一個如圖所示的對話框。



在這裏我們可以通過下拉框選擇主窗體(Main form),在左側的Auto-create forms裏列出了所有的窗口,這裏面的窗口通常是動態創建,你可以把需要動態創建的窗口(Available forms)通過中間的那四個按鈕調到右側,然後OK就可以了。
動態的創建的方法如下:
void _fastcall TForm1::Button1Click(TObject *Sender)
{
Tform2 *Forms;
try
{
Form2=new TForm2(Application);//動態創建Form2

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章