亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Delphi > 正文

Delphi中關于TApplication類的詳解

2019-11-18 18:39:21
字體:
來源:轉載
供稿:網友
Delphi中關于Tapplication類的詳解
 
  TApplication是Delphi應用程序的類型,該類是從TComponent繼承,在單元Forms中聲明。并且在Forms中有個公用的對象Application。其方法和屬性集中包括了 Windows操作系統中創建、運行和銷毀應用程序等既定的基本操作和屬性,因此在用Delphi編寫 Windows應用程序時簡化了用戶和Windows環境之間的接口。TApplication封裝了以下四個功能:
1、Windows消息處理。
2、菜單加速和鍵盤處理。
3、異常處理。
4、上下文聯機幫助。
下面就向大家介紹TApplication中的常用屬性、方法和事件。
1、屬性
1.  1屬性Active
屬性Active指明了應用程序是否處于活動狀態且擁有焦點。定義如下:
  PRoperty Active: Boolean;
Active是只讀屬性。當應用程序是活動狀態時Active為True,否則為False。TApplica-tion的構造器(constructor) 置Active為True。如果窗口或應用程序擁有焦點,那么該應用程序是活動的。當其它應用程序的窗口成為活的時,當前應用程序即為非活動的。應用程序關閉時TApplication的析構器(destructor) 置Active為False。
在應用程序中,可以用一個計時器(TTimer)來檢查屬性Active的值,從而確定當前的應用程序是否是活動狀態,以便作出相應的處理。也可以在事件OnActive和事件OnDeactive中定義指定的操作。
  1.2屬性DialogHandle
  屬性DialogHandle提供使Delphi應用程序使用非Delphi對話框的一種機制。定義如下:
  property DialogHandle: HWnd;
當使用API函數CreateDialog創建一個非模式化對話框時需要使用 DialogHandle,并且需要查看應用程序消息循環中的消息以進行相應的操作。比如,當一個非模式化對話框收到一條激活消息(WM_NCACTIVATE)時可以將其句柄賦值到 DialogHandle,當對話框收到一條解除激活消息時置DialogHandle為0。
1.3屬性ExeName
  屬性ExeName包含了可執行的應用程序文件名極其路徑信息。定義如下:
  property ExeName: string;
      ExeName是只讀屬性。使用ExeName能夠得到應用程序可執行文件的文件名。
這是一個很有用的屬性。例如,運行光盤中的應用程序 f:/media/myapp.exe 時,可能需要訪問目錄 f:/media/data/ 中的文件或者確定應用程序所在的驅動器盤符。 這時可以使用Delphi提供的函數ExtractFilePath和ExtractFileName對屬性ExeName 進行解析,從而得到需要的信息。
1.4屬性Handle
  屬性Handle提供了對應用程序主窗口句柄的訪問。定義如下:
  property Handle: HWND;
當調用一個需要父窗口句柄的 Windows API函數時需要使用Handle屬性。例如,應用程序中某個動態鏈接庫(DLL) 可能需要父窗口句柄以使得其自身能夠彈出并且顯示在最前端。使用Application.Handle構成應用程序的若干窗口,使得這些窗口在應用程序中能夠被最小化、恢復、有效或無效。注意:編寫一個使用 VCL窗體的動態鏈接庫時,應將主運行程序中主窗口的句柄賦值到該動態鏈接庫的Application.Handle屬性。這樣就使得動態鏈接庫的窗體成為主應用程序的一部分。需要特別指出的是,永遠不要在EXE應用程序中給Application.Handle賦值。
1.5屬性HelpFile
  屬性HelpFile指明了應用程序用于顯示幫助內容的文件名。定義如下:
  property HelpFile: string;
使用HelpFile是為了應用程序擁有一個使用標準Windows幫助系統的幫助文件。Windows顯示由HelpFile屬性指明的幫助文件。要讓應用程序實現這一點,必須在運行時為HelpFile屬性賦予一個文件名的值,或者在設計時Project|Options對話框的Application頁面中指定一個幫助文件。默認情況下,HelpFile是一個空串(''),并且應用程序的幫助方法忽略所有的試圖顯示幫助。如果HelpFile包括任何內容,幫助主題的方法將根據文件名調出 Windows幫助系統以提供聯機幫助。
  注意:如果活動窗口的幫助文件已指定,則該文件將優先于應用程序的幫助文件顯示。
1.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屬性值。
1.7屬性HintHidePause
屬性HintHidePause 指定了鼠標尚未從控件或菜單項上移開、在隱藏幫助提示之前的時間間隔。定義如下:
  property HintHidePause: Integer;
用HintHidePause以毫秒為單位指定等待時間,在TApplication 的構造器中該屬性被置為2500毫秒(2.5秒)??丶虿藛雾椀膸椭崾驹贖int屬性中指定。
注意:默認應將HintHidePause的值預先確定為HintPause屬性值的3到5倍較合適。
1.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 等屬性的值從而確定當前活動窗口的位置以及尺寸等。
1.9屬性ShowMainForm
  屬性ShowMainForm確定了是否在應用程序啟動時顯示主窗體。定義如下:
  property ShowMainForm: Boolean;
應用程序用ShowMainForm屬性控制是否以及何時顯示其主窗體。TApplication的構造器置ShowMainForm為True。默認情況下主窗體將被顯示,MainForm屬性中指明了主窗體。
如果需要在應用程序啟動時隱藏主窗體,那么應在主工程文件中調用 Application.Run之前置ShowMainForm為False,并且確信主窗體的Visible屬性值為False。這在許多實現OLE自動化服務器是很有用的,比如在啟動自動化服務時隱藏服務器程序的主窗體。
另外,如果需要在應用程序啟動時顯示一個閃出圖片(Flash) 并為應用程序的環境做一些準備,同時需要禁止主窗體顯示,這也可以利用屬性ShowMainForm來實現。比如Delphi啟動時就禁止了主窗體的顯示。
1.10屬性Terminated
  屬性Terminated報告程序是否收到終止程序的Windows消息WM_QUIT。定義如下:
  property Terminated: Boolean;
Terminated是只讀屬性。該屬性主要用于調用ProcessMessages 方法時應用程序不必在停止后試圖處理Windows 消息。當ProcessMessages方法收到消息WM_QUIT時,Terminated將被置為True。
  Delphi應用程序總會因為主窗體或應用程序關閉,或者因為Terminate 方法被調用而收到消息WM_QUIT。
  當應用程序執行強度較大、占用系統資源較多的運算時,應當周期性地調用Applicati-on.ProcessMessages方法,并檢查屬性Application.Terminated以確定是否需要終止運算從而終止應用程序。
1.11屬性UpdateFormatSettings
屬性UpdateFormatSettings指明了當用戶改變系統配置時應用程序是否自動更新格式設置。定義如下:
  property UpdateFormatSettings: Boolean;
  使用UpdateFormatSettings屬性應用程序可以控制自動更新格式設置。TApplication的構造器置該屬性為True。當應用程序收到消息WM_WININICHANGE時將檢查UpdateFormatSett-ings屬性。建議使用默認的格式設置,也就是Windows本地的設置??梢灾肬pdateFormatSe-ttings為False以避免在Delphi應用程序執行期間改變格式設置。
1.12屬性UpdateMetricSettings
屬性UpdateMetricSettings屬性指明是否對提示窗口字體和圖標標題等相關設置進行更新。定義如下:
  property UpdateMetricSettings: Boolean;
  UpdateFormatSettings屬性指明系統中提示窗口字體和圖標標題等設置改變是否反映到應用程序中相關設置的改變。TApplication的構造器置UpdateMetricSettings的初始值為True。
2、方法
2.1方法BringToFront
方法BringToFront設置應用程序中最近一次的活動窗口到桌面上所有窗口的最前端。其定義如下:
  procedure BringToFront;
  用BringToFront方法可以找到屬于主窗體的最近一次的活動窗口并且將其置于最前端。BringToFront方法也可以測試和查看一個窗口在成為最前端窗口之前是否是可見 (Visible) 和有效的(Enabled) 。 例如,當應用程序收到郵件時,可能需要將專門的處理程序激活并置于Windows 桌面的最前端。這時就可以調用Application.BringToFront方法來實現。
2.2方法CreateForm
  方法CreateForm方法用于創建新的窗體(form)。定義如下:
  procedure CreateForm(FormClass: TFormClass; var Reference);
Delphi應用程序總會調用CreateForm方法。因此程序員很少有必要直接調用CreateForm方法。一個典型的Delphi工程在工程的主體代碼部分包括一處或多處調用CreateForm方法,并且在使用窗體設計器時自動控制窗體的創建。也可以在運行時可以調用CreateForm方法來動態創建窗體。CreateForm方法根據FormClass 參數創建一個新的指定的窗體并且將窗體賦予到變量參數Reference。 新創建的窗體的所有者就是對象Application。 應用程序將第一個調用CreateForm 創建的窗體默認為工程的主窗體。
2.3方法HandleException
  方法HandleException為應用程序的異常提供默認的句柄。定義如下:
  procedure HandleException(Sender: TObject);
方法HandleException 對于編寫特定組件的作者來說是很有用的,因為它可以產生一個不必對Windows 消息產生響應的事件。在應用程序中可以利用OnException 事件句柄將其它的異常操作控制在自定義的代碼中。在應用程序代碼中,如果異常跳過了所有的try 塊,那么應用程序將自動調用HandleE-xception方法,并將顯示一個提示有錯誤發生的對話框。除非異常對象是EAbort,此時Han-dleException將調用OnException句柄(如果存在),否則將調用ShowException顯示一個提示有錯誤發生的對話框。
2.4方法UnhookMainWindow
UnhookMainWindow方法用于釋放由HookMainWindow方法掛在主窗體的程序。定義如下:
  type TWindowHook = function(var Message: TMessage): Boolean of object;
  procedure UnhookMainWindow(Hook: TWindowHook);
用UnhookMainWindow可以釋放掛鉤窗口。在參數Hook中指明對話框過程?! windowHook 類型是調用HookMainWindow方法的參數。該參數是非Delphi對話框中調用對話程序的方法指針。對話程序與窗口程序相似,都是為對話框處理消息,只是語法不同。
3、事件
3.1事件OnActivate
  當應用程序成為活動狀態時OnActivate事件發生。定義如下:
  type TNotifyEvent = procedure (Sender: TObject) of object;
  property OnActivate: TNotifyEvent;
用OnActive事件編寫一個事件句柄來完成當應用程序成為活動狀態時指定特別的處理。當一個Windows 應用程序最初運行時或其焦點從另一個Windows 應用程序轉移回到當前應用程序時,該應用程序成為活動狀態。
3.2事件OnDeactivate
  當應用程序成為非活動狀態時OnDeactivate事件發生。定義如下:
  type TNotifyEvent = procedure (Sender: TObject) of object;
  property OnDeactivate: TNotifyEvent;
在應用程序成為非活動狀態之前可以立即觸發OnDeactive事件,從而完成在該事件句柄中指定的特別處理。當用戶從當前應用程序轉換到另一應用程序時,當前應用程序的OnDeactive事件即發生。
3.3事件OnException
  當應用程序中的某個無句柄的異常發生時事件OnException發生。定義如下:
  type TExceptionEvent = procedure (Sender: TObject; E: Exception) of object;
  property OnException: TExceptionEvent;
  可以通過OnException 事件來改變在應用程序中無句柄的異常發生時的默認動作。在方法TApplication.HandleException方法中,OnException 事件句柄被自動調用。
  OnException 事件僅用于處理在進行消息處理時發生的異常。在Application.Run 執行前或執行后發生的異常不會導致OnException事件發生。
  如果某個異常在應用程序代碼的try 塊中被忽略,那么應用程序將自動調用HandleException方法。除非異常對象是EAbort,此時HandleException 將調用OnException句柄(如果存在), 否則將調用ShowException 顯示一個提示有錯誤發生的對話框。TExceptionEvent類型是OnException事件的類型,該類型在應用程序中指向一個處理異常的方法。參數Sender是引發異常的對象,而參數E 是異常對象。
3.4事件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被調用。
3.5事件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)。
3.6事件OnIdle
  當應用程序成為空閑狀態時OnIdle事件發生。定義如下:
  type TIdleEvent = procedure (Sender: TObject; var Done: Boolean) of object;
  property OnIdle: TIdleEvent
  用OnIdel編寫一個事件句柄當應用程序空閑時完成指定的操作。當應用程序不執行任何代碼時即為空閑的。例如,當應用程序等待用戶輸入時該應用程序是空閑的?! IdelEvent類型是OnIdel事件的類型,它指向一個當應用程序空閑時運行的方法。對象TIdelEvent有一個默認為True的布而變量Done。當Done為True時,Windows API 函數WaitMessage將在OnIdel返回時被調用。WaitMessage 使其它應用程序得到控制焦點直到應用程序的消息隊列中出現一條新的消息。當參數Done為False 且應用程序不忙時,應用程序不會使其它應用程序得到控制焦點。當應用程序轉為空閑狀態時,OnIdel事件僅發生一次,直到參數Done置為True才可能發生下一次OnIdel事件。應用程序置Done為False消除了紊亂的CPU時間計數,而該計數可能影響整個系統的性能。
3.7事件OnMessage
  當應用程序收到WINDOWS消息時產生,定義如下:
  type  TMessageEvent = procedure (var Msg: TMsg; var Handled: Boolean) of object;
  property OnMessage: TmessageEvent
      用于接收WINDOWS消息,該事件能接收程序向WINDOWS發送的所有消息。應用程序接收到一個消息時產生該事件。變量Msg是WINDOWS消息類型。

上一篇:兩種Delphi實現Singleton模式方法

下一篇:Delphi中的類和對象

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美一区二区激情| 国产一区二区三区欧美| 1769国内精品视频在线播放| 日韩在线视频免费观看| 国产精品色视频| 成人两性免费视频| 亚洲精品美女网站| 亚洲国产中文字幕在线观看| 日韩av网站导航| 久久精品99久久久久久久久| 国产午夜精品免费一区二区三区| 91亚洲精品一区| 国产又爽又黄的激情精品视频| 成人高h视频在线| 国产欧美亚洲精品| 中文字幕日韩精品在线| 欧美黄色性视频| 色狠狠av一区二区三区香蕉蜜桃| 亚洲精品白浆高清久久久久久| 亚洲人成啪啪网站| 538国产精品一区二区免费视频| 成人免费激情视频| 2019国产精品自在线拍国产不卡| 欧美亚洲国产另类| 日韩激情av在线播放| 久久久国产91| 欧美区在线播放| 欧美性生活大片免费观看网址| 日韩性生活视频| 精品亚洲夜色av98在线观看| 成人黄色片网站| 中文字幕亚洲一区二区三区五十路| 国产午夜精品全部视频播放| 亚洲精品电影网| 久久精品国产清自在天天线| 91超碰中文字幕久久精品| y97精品国产97久久久久久| 国产精品国产三级国产aⅴ浪潮| 欧美日韩福利视频| 久久精品人人做人人爽| 亚洲精品美女久久久| 色偷偷av一区二区三区| 国产精品久久久久久久av大片| 日韩国产欧美精品一区二区三区| 一本色道久久综合亚洲精品小说| 日韩欧美一区二区在线| 亚洲老头同性xxxxx| 亚洲久久久久久久久久久| 国产精品美女呻吟| 欧美日韩精品在线观看| 色噜噜狠狠狠综合曰曰曰88av| 欧美性猛交xxxx偷拍洗澡| 国产一区在线播放| 国产乱人伦真实精品视频| 91av在线免费观看| 国产精品永久免费在线| 97在线看免费观看视频在线观看| 国产精品揄拍500视频| 最近中文字幕日韩精品| 日本午夜在线亚洲.国产| 欧美色道久久88综合亚洲精品| 欧美性xxxxx极品| 久久成人一区二区| 91精品久久久久久综合乱菊| 久久露脸国产精品| 国产精品第七影院| 5566成人精品视频免费| 欧美日韩国产在线播放| 欧美大片在线看| 欧美激情亚洲自拍| 久久精品视频va| 国产精品福利在线| 亚洲精品一区二区三区婷婷月| 久久久久www| 精品一区二区三区四区在线| 91视频-88av| 日韩的一区二区| 久久精品国产99国产精品澳门| 久久综合久久八八| 午夜精品三级视频福利| 91免费高清视频| 欧美激情一区二区久久久| 欧美亚洲第一页| 日韩精品中文字幕在线播放| 国产成人91久久精品| 国产精品影院在线观看| 夜夜嗨av色综合久久久综合网| 欧美日韩999| 国产一区二区av| 久久国产精品久久久久| 国产精品视频导航| 欧美日韩一区二区在线播放| 55夜色66夜色国产精品视频| 久久久999精品| 国产精品视频网| 91精品久久久久久综合乱菊| 欧美极品少妇与黑人| 国产日韩在线精品av| 久久久久久高潮国产精品视| 日韩欧美亚洲成人| 91精品国产乱码久久久久久久久| 久久精品国产亚洲精品2020| 91大神在线播放精品| 久久久精品影院| 欧美日韩亚洲91| 国产精品大片wwwwww| 欧美日韩国产精品专区| 亚洲国产成人久久综合| 亚洲成人中文字幕| 日韩av在线免费看| 96sao精品视频在线观看| 91高清在线免费观看| 国产精品美女主播在线观看纯欲| 中文字幕精品在线视频| 久久久久久中文字幕| 国产mv免费观看入口亚洲| 欧美成人亚洲成人日韩成人| 国产一区玩具在线观看| 欧美日本精品在线| 久久久噜噜噜久久中文字免| 国产成+人+综合+亚洲欧美丁香花| 久久国产精品久久久久| 97人洗澡人人免费公开视频碰碰碰| 久久精品中文字幕| 国产成人av在线播放| 欧美激情免费看| 国产成人精品日本亚洲| 国产一区欧美二区三区| 久久精品久久久久久国产 免费| 亚洲成人a级网| 国产ts人妖一区二区三区| 亚洲第一区第一页| 日韩欧美aaa| 97人洗澡人人免费公开视频碰碰碰| 日韩经典中文字幕在线观看| 国产精品网红直播| 亚洲二区中文字幕| 亚洲精品av在线| 91av福利视频| 精品国产老师黑色丝袜高跟鞋| 亚洲国模精品一区| 伦理中文字幕亚洲| 精品成人av一区| 欧美视频二区36p| 最近的2019中文字幕免费一页| 日韩欧美一区二区三区久久| 欧美精品第一页在线播放| 精品亚洲一区二区三区在线观看| 久久久精品在线| 亚洲精品自拍偷拍| 亚洲图片制服诱惑| 在线激情影院一区| 国产欧美一区二区三区视频| 亚洲精品日产aⅴ| 日韩在线精品一区| 国产免费一区视频观看免费| 8050国产精品久久久久久| 亚洲精品理论电影| 欧美综合在线第二页| 久久久亚洲福利精品午夜| 亚洲精品狠狠操| 国产69精品久久久| 一区二区三区视频免费在线观看| 精品性高朝久久久久久久|