Delphi中TApplication詳解(轉僅供自己參考)

來源:互聯網
上載者:User

標籤:變數   box   另一個   vcl   roc   enc   reference   exe   ini   

轉自:http://blog.sina.com.cn/s/blog_4d6f55d90100bmv9.html

  TApplication是用於Delphi應用程式的類型,該類在單元forms中聲明。TApplication是Delphi構造 Windows應用程式所需的類型,其方法和屬性集中包括了Windows作業系統中建立、運行和銷毀應用程式等既定的基本操作和屬性,因此在用Delphi編寫 Windows應用程式時簡化了使用者和Windows環境之間的介面。TApplication封裝了以下功能:
1、Windows訊息處理。
2、上下文線上說明。
3、菜單加速和鍵盤處理。
4、異常處理。
5、管理由Windows作業系統為應用程式定義的基本部分,如主視窗、視窗類別等。

  每個Delphi應用程式自動聲明一個 Application變數作為應用程式的執行個體。如果Delphi應用程式不是一個Web伺服器應用程式,那麼該變數一定是TApplication類型。因此TApplication不需要出現在組件選擇板(component palette)中,並在表單設計器(form designer)中也不能對其進行可視化操作,故TApplication不具有發布屬性(published properties)。不過,TApplication的公用屬性(public properites)在設計時(design-time)是可以設定或修改的,如在Project|Options對話方塊的Forms和Application頁面中。

  下面就向大家介紹TApplication中的大部分屬性、方法和事件。

1、屬性Active指明了應用程式是否處於活動狀態且擁有焦點。定義如下:

  property Active: Boolean;

  Active是唯讀屬性。當應用程式是活動狀態時Active為True,否則為False。
TApplication的構造器(constructor) 置Active為True。如果視窗或應用程式擁有焦點,那麼該應用程式是活動的。當其它應用程式的視窗成為活的時,當前應用程式即為非活動的。應用程式關閉時TApplication的析構器(destructor) 置Active為False。

  在應用程式中,可以用一個計時器(TTimer)來檢查屬性Active的值,從而確定當前的應用程式是否是活動狀態,以便作出相應的處理。也可以在事件OnActive和事件OnDeactive中定義指定的操作。

2、屬性DialogHandle

  屬性DialogHandle提供使Delphi應用程式使用非Delphi對話方塊的一種機制。
定義如下:

  property DialogHandle: HWnd;

  當使用API函數CreateDialog建立一個非模式化對話方塊時需要使用 DialogHandle,並且需要查看應用程式訊息迴圈中的訊息以進行相應的操作。比如,當一個非模式化對話方塊收到一條啟用訊息(WM_NCACTIVATE)時可以將其控制代碼賦值到 DialogHandle,當對話方塊收到一條解除啟用訊息時置DialogHandle為0。

3、屬性ExeName

  屬性ExeName包含了可執行檔應用程式檔案名極其路徑資訊。定義如下:

  property ExeName: string;

  ExeName是唯讀屬性。使用ExeName能夠得到應用程式可執行檔的檔案名稱。
 

  這是一個很有用的屬性。例如,運行光碟片中的應用程式 f:\media\myapp.exe 時,可能需要訪問目錄 f:\media\data\ 中的檔案或者確定應用程式所在的磁碟機盤符。 這時可以使用Delphi提供的函數ExtractFilePath和ExtractFileName對屬性ExeName 進行解析,從而得到需要的資訊。

4、屬性Handle

  屬性Handle提供了對應用程式主視窗控制代碼的訪問。定義如下:

  property Handle: HWND;

當調用一個需要父視窗控制代碼的Windows API函數時需要使用Handle屬性。例如,應用程式中某個動態連結程式庫(DLL) 可能需要父視窗控制代碼以使得其自身能夠彈出並且顯示在最前端。使用Application.Handle構成應用程式的若干視窗,使得這些視窗在應用程式中能夠被最小化、恢複、有效或無效。
注意:編寫一個使用 VCL表單的動態連結程式庫時,應將主運行程式中主視窗的控制代碼賦值到該動態連結程式庫的Application.Handle屬性。這樣就使得動態連結程式庫的表單成為主應用程式的一部分。
需要特別指出的是,永遠不要在EXE應用程式中給Application.Handle賦值。

5、屬性HelpFile

  屬性HelpFile指明了應用程式用於顯示協助內容的檔案名稱。定義如下:

  property HelpFile: string;

使用HelpFile是為了應用程式擁有一個使用標準Windows協助系統的協助檔案。Windows顯示由HelpFile屬性指明的協助檔案。
要讓應用程式實現這一點,必須在運行時為HelpFile屬性賦予一個檔案名稱的值,或者在設計時Project|Options對話方塊的Application頁面中指定一個協助檔案。預設情況下,HelpFile是一個空串(‘‘),並且應用程式的協助方法忽略所有的試圖顯示協助。如果HelpFile包括任何內容,說明主題的方法將根據檔案名稱調出 Windows協助系統以提供線上說明。

  注意:如果使用中視窗的協助檔案已指定,則該檔案將優先於應用程式的協助檔案顯示。

6、屬性Hint

  屬性Hint指明了出現在協助提示框(Help Hint box)中的文本字串。定義如
下:

  property Hint: string;

TApplication.Hint屬性就是滑鼠正在移動經過的控制項或功能表項目的 Hint值。該屬性也能被賦予一個向使用者提供動作、錯誤或其它資訊的字串值。
使用Hint屬性也能夠從控制項傳遞提示資訊到另一顯示區,例如通過OnHint事件控制代碼將提示顯示到狀態列中。這時是讀取Hint屬性。當應用程式進行中某一動作時簡要描述其狀態。這時是設定Hint屬性。當OnHint事件發生時協助提示才出現。
因此,即使TApplication的Hint屬性被賦予狀態列的標題,例如狀態列控制項的標題顯示Hint屬性的當前字串值,也應歸於OnHint事件。

  Hint字串包括兩部分:短提示和長提示。短提示用於簡潔的彈出提示;長提示與短提示之間用豎線"|"隔開,用於在狀態列中顯示較詳細的提示資訊。可以使用單元 Controls中提供的字串函數GetShortHint和GetLongHint從Hint屬性中分解得到短提示和長提示。

  注意:當應用程式通過設定Hint屬性向使用者提供某一事件發生的資訊時應當切記,預設情況下,當滑鼠移動經過某一控制項時,Hint字串被複位到該控制項的Hint屬性值。

7、屬性HintHidePause

  屬性HintHidePause 指定了滑鼠尚未從控制項或功能表項目上移開、在隱藏協助提示之前的時間間隔。定義如下:

  property HintHidePause: Integer;

  用HintHidePause以毫秒為單位指定等待時間,在TApplication 的構造器中該屬性被置為2500毫秒(2.5秒)。控制項或功能表項目的協助提示在Hint屬性中指定。

  注意:預設應將HintHidePause的值預先確定為HintPause屬性值的3到5倍較合適。

8、屬性MainForm

  屬性MainForm唯一標識了應用程式的主表單。定義如下:

  property MainForm: TForm;

  屬性MainForm指定的表單不一定等同於應用程式的主視窗。屬性MainForm的值一定是由方法CreateForm建立的所有表單中的第一個表單,但該表單未必是應用程式的主視窗。建立一個工程時,MainForm屬性值自動置為Form1。在設計時可通過Project|Options對話方塊中的Forms頁面在多個表單中指定其中之一為MainForm。

  在運行時是不能修改MainForm屬性的,因為該屬性是唯讀。

主表單是應用程式主題建立的第一個表單。

主表單關閉即應用程式終止。

  在應用程式中,可以調用方法Application.MainForm.Close來終止應用程式運行,可以擷取Application.MainForm.Top、Application.MainForm.Left 等屬性的值從而確定當前使用中視窗的位置以及尺寸等。

9、屬性ShowMainForm

  屬性ShowMainForm確定了是否在應用程式啟動時顯示主表單。定義如下:

  property ShowMainForm: Boolean;

  應用程式用ShowMainForm屬性控制是否以及何時顯示其主表單。

  TApplication的構造器置ShowMainForm為True。預設情況下主表單將被顯示,MainForm屬性中指明了主表單。

  如果需要在應用程式啟動時隱藏主表單,那麼應在主工程檔案中調用 Application.Run之前置ShowMainForm為False,並且確信主表單的Visible屬性值為False。這在許多實現OLEAutomation 伺服程式是很有用的,比如在啟動自動化服務時隱藏伺服器程式的主表單。

  另外,如果需要在應用程式啟動時顯示一個閃出圖片(Flash) 並為應用程式的環境做一些準備,同時需要禁止主表單顯示,這也可以利用屬性ShowMainForm來實現。比如Delphi啟動時就禁止了主表單的顯示。

10、屬性Terminated

  屬性Terminated報告應用程式是否收到終止程式的Windows訊息WM_QUIT。定義如下:

  property Terminated: Boolean;

Terminated是唯讀屬性。該屬性主要用於調用ProcessMessages 方法時應用程式不必在停止後試圖處理Windows 訊息。
當ProcessMessages方法收到訊息WM_QUIT時,Terminated將被置為True。

  Delphi應用程式總會因為主表單或應用程式關閉,或者因為Terminate 方法被調用而收到訊息WM_QUIT。

  當應用程式執行強度較大、佔用系統資源較多的運算時,應當周期性地調用Application.ProcessMessages方法,並檢查屬性Application.Terminated以確定是否需要終止運算從而終止應用程式。

11、屬性UpdateFormatSettings

  屬性UpdateFormatSettings指明了當使用者改變系統配置時應用程式是否自動更新格式設定。定義如下:

  property UpdateFormatSettings: Boolean;

  UpdateFormatSettings屬性指明系統中提示視窗字型和表徵圖標題等設定改變是否反映到應用程式中相關設定的改變。

TApplication的構造器置UpdateMetricSettings的初始值為True。

使用UpdateFormatSettings屬性應用程式可以控制自動更新格式設定。TApplication的構造器置該屬性為True。
當應用程式收到訊息WM_WININICHANGE時將檢查UpdateFormatSett-ings屬性。建議使用預設的格式設定,也就是Windows本地的設定。可以置UpdateFormatSe-ttings為False以避免在Delphi應用程式執行期間改變格式設定。

12、方法BringToFront

  方法BringToFront設定應用程式中最近一次的使用中視窗到案頭上所有視窗的最前端。其
定義如下:

  procedure BringToFront;

  用BringToFront方法可以找到屬於主表單的最近一次的使用中視窗並且將其置於最前端。

BringToFront方法也可以測試和查看一個視窗在成為最前端視窗之前是否是可見 (Visible) 和有效(Enabled) 。

  例如,當應用程式收到郵件時,可能需要將專門的處理常式啟用共置於Windows 案頭的最前端。這時就可以調用Application.BringToFront方法來實現。

13、方法CreateForm

  方法CreateForm方法用於建立新的表單(form)。定義如下:

  procedure CreateForm(FormClass: TFormClass; var Reference);

  Delphi應用程式總會調用CreateForm方法。因此程式員很少有必要直接調用CreateForm方法。一個典型的Delphi工程在工程的主體代碼部分包括一處或多處調用CreateForm方法,並且在使用表單設計器時自動控制表單的建立。也可以在運行時可以調用CreateForm方法來動態建立表單。

  CreateForm方法根據FormClass 參數建立一個新的指定的表單並且將表單賦予到變數參數Reference。 新建立的表單的所有者就是對象Application。 應用程式將第一個調用CreateForm 建立的表單預設為工程的主表單。

14、方法HandleException

  方法HandleException為應用程式的異常提供預設的控制代碼。定義如下:

  procedure HandleException(Sender: TObject);

  方法HandleException 對於編寫特定組件的作者來說是很有用的,因為它可以產生一個不必對Windows 訊息產生響應的事件。在應用程式中可以利用OnException 事件控制代碼將其它的異常操作控制在自訂的代碼中。

  在應用程式代碼中,如果異常跳過了所有的try 塊,那麼應用程式將自動調用HandleException方法,並將顯示一個提示有錯誤發生的對話方塊。除非異常對象是EAbort,此時HandleException將調用OnException控制代碼(如果存在),否則將調用ShowException顯示一個提示有錯誤發生的對話方塊。

15、方法UnhookMainWindow

  UnhookMainWindow方法用於釋放由HookMainWindow方法掛在主表單的程式。定義如下:

  type TWindowHook = function(var Message: TMessage): Boolean of object;

  procedure UnhookMainWindow(Hook: TWindowHook);

  用UnhookMainWindow可以釋放掛鈎視窗。在參數Hook中指明對話方塊過程。


  TwindowHook 類型是調用HookMainWindow方法的參數。該參數是非Delphi對話方塊中調用對話程式的方法指標。對話程式與視窗程序相似,都是為對話方塊處理訊息,只是文法不同。

16、事件OnActivate

  當應用程式成為活動狀態時OnActivate事件發生。定義如下:

  type TNotifyEvent = procedure (Sender: TObject) of object;

  property OnActivate: TNotifyEvent;

  用OnActive事件編寫一個事件控制代碼來完成當應用程式成為活動狀態時指定特別的處理。

  當一個Windows 應用程式最初運行時或其焦點從另一個Windows 應用程式轉移回到當前

應用程式時,該應用程式成為活動狀態。

17、事件OnDeactivate

  當應用程式成為非使用中時OnDeactivate事件發生。定義如下:

  type TNotifyEvent = procedure (Sender: TObject) of object;

  property OnDeactivate: TNotifyEvent;

  在應用程式成為非使用中之前可以立即觸發OnDeactive事件,從而完成在該事件控制代碼中指定的特別處理。當使用者從當前應用程式轉換到另一應用程式時,當前應用程式的OnDeactive事件即發生。

18、事件OnException

  當應用程式中的某個無控制代碼的異常發生時事件OnException發生。定義如下:
 

  type TExceptionEvent = procedure (Sender: TObject; E: Exception) of object;

  property OnException: TExceptionEvent;

  可以通過OnException 事件來改變在應用程式中無控制代碼的異常發生時的預設動作。在方法TApplication.HandleException方法中,OnException 事件控制代碼被自動調用。

  OnException 事件僅用於處理在進行訊息處理時發生的異常。在Application.Run 執行前或執行後發生的異常不會導致OnException事件發生。

  如果某個異常在應用程式代碼的try 塊中被忽略,那麼應用程式將自動調用HandleExc
eption方法。除非異常對象是EAbort,此時HandleException 將調用OnException控制代碼(如果存在), 否則將調用ShowException 顯示一個提示有錯誤發生的對話方塊。

  TExceptionEvent類型是OnException事件的類型,該類型在應用程式中指向一個處理異常的方法。參數Sender是引發異常的對象,而參數E 是異常對象。

19、事件OnHelp

  當應用程式收到協助請求時OnHelp事件發生。定義如下:

  type THelpEvent = function (Command: Word; Data: Longint; var CallHelp: Boolean): Boolean of object;

  property OnHelp: THelpEvent;

  用OnHelp編寫一個事件控制代碼以完成有請求協助時特別的處理。HelpContext方法和HelpJump方法自動引發OnHelp事件。

  在事件發生之後置CallHelp為True使VCL調用WinHelp;置CallHelp為False以防止VCL調

用WinHelp。 Delphi應用程式中所有與協助有關的方法都經過OnHelp事件。僅當OnHelp事件中的CallHelp參數返回True或OnHelp事件沒有被指定到有效控制代碼時,WinHelp被調用。

20、事件OnHint

  當滑鼠指標移動經過某個控制項或功能表項目並且該控制項或功能表項目能夠顯示協助提示時,事件

OnHint發生。定義如下:

  type TNotifyEvent = procedure (Sender: TObject) of object;

  property OnHint: TNotifyEvent;

  用OnHint編寫的事件控制代碼能夠在OnHint事件發生時執行指定的操作。當使用者停放滑鼠指標在某個控制項上,並且該控制項的Hint屬性值不是空串(‘‘),這時OnHint事件將發生。

  通常用OnHint事件顯示控制項或功能表項目Hint屬性的值作為某個面板控制項(如TStatusBar)的標題,因此把面板(panel) 用作狀態列(status bar)。當OnHint事件發生時,Hint屬性通常被指定為一個協助提示(Help Hint)和一個在別處顯示的長提示(longer hint)。
 
21、事件OnIdle

  當應用程式成為空白閑狀態時OnIdle事件發生。定義如下:

  type TIdleEvent = procedure (Sender: TObject; var Done: Boolean) of object;

  property OnIdle: TIdleEvent

  用OnIdel編寫一個事件控制代碼當應用程式空閑時完成指定的操作。當應用程式不執行任何代碼時即為空白閑的。例如,當應用程式等待使用者輸入時該應用程式是閒置。


  TIdelEvent類型是OnIdel事件的類型,它指向一個當應用程式空閑時啟動並執行方法。對象

TIdelEvent有一個預設為True的布而變數Done。當Done為True時,Windows API 函數WaitMessage將在OnIdel返回時被調用。WaitMessage 使其它應用程式得到控制焦點直到應用程式

的訊息佇列中出現一條新的訊息。當參數Done為False 且應用程式不忙時,應用程式不會使其它應用程式得到控制焦點。

  當應用程式轉為空白閑狀態時,OnIdel事件僅發生一次,直到參數Done置為True才可能發生下一次OnIdel事件。應用程式置Done為False消除了紊亂的CPU時間計數,而該計數可能影響整個系統的效能。

22、OnMessage

  當應用程式接收到Windows訊息時事件OnMessage觸發,定義如下:

  type TMessageEvent = procedure (var Msg: TMsg; var Handled: Boolean) of Object;

  preperty OnMessage: TMessageEvent

  用於接收Windows訊息,該事件能接收程式向Windows發送的所有訊息。應用程式接收到一個訊息時觸發該事件。變數Msg是Windows訊息類型。

(本文出自 Delphi物件導向編程思想 劉藝)

Delphi中TApplication詳解(轉僅供自己參考)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.