理解TApplication、TScreen和TForm

第4章 開發應用程序用戶界面

使用C++Builder,可以通過將組件面板上的組件拖放到窗體中來建立用戶界面(UI)。

4.1 理解Tapplication、TScreen和TForm

TApplication、TScreen和TForm這幾個VCL類通過對工程的控制而成爲所有C++Builder應用程序的主幹。TApplication通過提供屬性和方法來封裝標准的Windows應用,並由此形成Windows應用程序的基礎。

TScreen通常用于在運行時記錄已裝入的窗體和數據模塊,以及一些特定的系統信息。例如屏幕顯示效果,可顯示的字體等。TForm的實例用于創建應用程序的用戶界面,此外,應用程序中的窗口對話框也基于TForm。

4.1.1 使用主窗體

TForm是創建WindowsGUI應用程序的要害類。缺省時,在工程中創建並保存的第一個窗體會成爲工程的主窗體,也即運行時第一個生成的窗體。當在工程中加入窗體後,可能會決定指定另外的窗體作爲應用程序主窗體。指定一個窗體爲主窗體可在運行時很輕易地測試出來,因爲除非改變窗體的生成順序,否則,主窗體總是運行程序時第一個顯示的窗體。

若要改變工程的主窗體:

1) 選擇PRoject│Options菜單項。然後選中Forms頁。

2) 在MainForm組合框中選擇欲作爲工程主窗體的窗體名,並選擇OK運行應用程序。假如此時運行程序,新選擇的主窗體被首先顯示。

4.1.2 加入其他窗體

選擇File│NewForm菜單項,可以在工程中加入新的窗體。選擇View│ProjectManager菜單項。可在工程治理器中查工程中包含的所有窗體及其單元文件的列表。

鏈接窗體

在工程中加入窗體的同時會將窗體引用加入工程文件,但不會加入其他單元文件。在編寫引用新窗體的代碼之前,應在引用該窗體的單元文件中加入對該窗體的引用。這個過程稱之爲鏈接窗體。

通常,鏈接窗體的原因通常是因爲要提供訪問該窗體中包含的組件。例如在一個包含數據訪問組件的數據模塊及一個包含數據感知組件的窗體之間,就經常要使用窗體鏈接。要將一個窗體鏈接到另一個窗體:

1) 選取需引用另一個窗體的窗體。

2) 選擇File│IncludeUnitHdr菜單項。

3) 選擇被引用窗體的單元文件名。

4) 選擇OK。

將一個窗體鏈接到另一個只不過是在一個窗體的單元文件中加入另一個窗體單元的頭文件。這表示被鏈接的窗體及其組件當前包括在鏈接窗體的範圍內。

4.1.3 隱藏主窗體

在應用程序啓動時可以不顯示主窗體。爲此,需用到全局變量Application(在下節介紹)要在啓動時隱藏主窗體:

1) 選擇Project│ViewSource菜單顯示工程主文件

2) 在Application→CreateForm()調用之後及Application→Run()調用之前添加下列語句:

Application→Showmainform = false;

Form1→Visible = false; // the name of your main form differ

注重 隱藏窗體更好的方式是在設計時使用對象觀察器將窗體Visible的屬性設爲false,而不是用上述方法在運行時設置。

QQread.com

推出各大專業服務器評測 linux服務器的安全性能

SUN服務器

HP服務器

DELL服務器

IBM服務器

聯想服務器

浪潮服務器

曙光服務器

同方服務器

華碩服務器

寶德服務器

4.1.4 工作在應用程序層

在所有基于VCL的Windows應用程序中都有TApplication類的全局變量Application。Application與應用程序封裝在一起,並提供了許多工作于後台的功能函數。例如Application會處理如何利用菜單調用幫助文件。對于開發獨立的應用程序與編寫組件而言,理解TApplication如何工作對後者更加重要,不過,即使是開發獨立的應用程序,在創建工程時,也應在Project│options菜單項的Application頁面中設置Application處理的各個選項。

另外,Application還會接收許多作用于整個應用程序的事件。例如OnActivate可使你在應用程序啓動時完成一些操作。OnIdle事件在應用程序空閑時處理後台操作,OnMessage事件可接收Windows消息等等。盡管不能在IDE中直接檢查全局變量Application的屬性和事件,但可使用另一組件TApplicationEvents來接收事件,並用IDE來提供事件處理程序。

4.1.5 處理屏幕

在創建工程時還會創建一個類型爲TScrecn的全局變量Screen。Screen封裝了應用程序運行時所在的屏幕的狀態。Screen實現的常見任務包括確定光標外觀。應用程序運行時的窗口大小。屏幕設備的可用字體列表以及多屏幕方式等。若應用程序運行于多個監視器上。Screen會維護一個監視器列表及它們的尺寸,以便有效的治理用戶界面的布局。

4.1.6 治理布局

簡單地說,治理用戶界面的布局就是控制將控件放入窗體的方式,所選擇的放置方式會反映在控件的Top、Left、Width和Height等屬性中,在運行時,也可以通過改變這些屬性值來改變控件的大小及在窗體中的位置。

控件還有很多其他的屬性可用于根據其內容或容器進行自動的調整。這使得窗體的布局可被設置爲各部分集成的一個整體。

有兩個屬性會影響控件相對于父代的大小及位置。

Align屬性強制控件沿著父代的某特定邊緣放置,或是在其他控件放置結束後填滿剩下的整個客戶區。

當父代改變大小時,控件也會自動地改變大小。同時保持沿著父代特定邊緣或填滿客戶區的剩余部分。

假如需要控件沿父代特定邊緣放置,但不希望它隨父代而改變大小或總是緊貼整個邊緣。可使用Anchors屬性。

假如要確保控件不會變得太大或太小,可用Constraints屬性。Constraints可確定控件高度最大值與最小值,寬度最大值與最小值,通過這些設置可以像素爲單位限制控件的高度與寬度。例如,通過一容器控件的MinHeight及MinWidth。可以確保容器控件中的子控件始終可見。Constraints的值通過父代/子代的層次傳遞。因此,包含具有大小限制的子控件的對象可被限制大小。Constraints也可在控件的ChangeScale方法被調用時,防止它只在某一個方向上改變大小。

TControl引入了一個類型如TConstrainedResizeEvent的保護事件OnConstrainedResize:

理解TApplication、TScreen和TForm
點擊查看大圖

這個事件答應在改變控件大小時重載大小限制。大小限制被作爲參數傳入。並可在事件處理程序中改變。OnConstrainedResize發布于容器對象(TForm、TScrollBox、TControlBar和TPanel)。另外,編寫組件時可在TControl類的派生類中使用或發布此事件。

帶有可變尺寸大小內容的控件有一個AutoSize屬性,這使得控件可調整其字體或所包含對象的大小。

4.2 處理消息

消息是由Windows發給應用程序的通告,用于告知某些事件的發生。消息本身是Windows發送給控件的記錄。例如,當用戶在一個對話框中點擊鼠標時,Windows發送一個消息給當前活躍的控件。包含這個控件的應用程序會對消息做出反應。假如用戶點擊的是一個按鈕,在收到消息時就會觸發OnClick事件,假如點擊在窗體中,應用程序就可能會忽略此消息。

Windows發送給應用程序的記錄類型爲TMsg。Windows爲每個消息預定義了一個常數,這些數值存放在TMsg的消息字段中,每個常數都以字母wm開頭。

除非你重載消息處理系統並生成自己的消息處理程序,否則VCL會自動處理消息。

 
[CB]TForm應用技巧
一、讓窗口總是在最前面Form 的FormStyle屬性設置爲fsStayOnTop值。二、動態調用窗體Form 在缺省情況下,由File/New Form生成添加入項目文件中的窗體都具有"Auto Create"(自動創建)的特性。即只要程序運...查看完整版>>[CB]TForm應用技巧
 
TApplication 中CreateForm的用法
procedure CreateForm(FormClass:TFormClass;Var reference);作用:在應用程序中創建一個新的窗體在其參數中FormClass用來制定窗體類型,而Reference是所建立窗體的一個變量。動態建立窗體program project;...begin ...查看完整版>>TApplication 中CreateForm的用法
 
Delphi中關于TApplication類的詳解
Delphi中關于TApplication類的詳解   TApplication是Delphi應用程序的類型,該類是從TComponent繼承,在單元Forms中聲明。並且在Forms中有個公用的對象Application。其方法和屬性集中包括了 Windows操作系統中創建...查看完整版>>Delphi中關于TApplication類的詳解
 
TApplication類
TApplication是應用程序使用的類型。 類關系 TObject→TPersistent→TComponent TApplication 是一外封裝Windows 應用程序的類。在Y職TApplication中引入的方法和屬性,反映了 Windows 操作系統建立起來的如創建、運...查看完整版>>TApplication類
 
Delphi中關于TApplication類的詳解
摘要:Delphi中關于TApplication類的詳解Delphi中關于TApplication類的詳解office:office" />  TApplication是Delphi應用程序的類型,該類是從TComponent繼承,在單元Forms中聲明。並且在Forms中有個公用的...查看完整版>>Delphi中關于TApplication類的詳解