精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● Delphi>>其他>>Delphi中TApplication详解

主题:Delphi中TApplication详解
发信人: chenjz@GZ()
整理人: teleme(2001-03-29 21:54:50), 站内信件

标  题: Delphi中TApplication详解
发信站: 网易虚拟社区 (Tue Aug 29 12:00:51 2000), 站内信件

                Delphi中TApplication详解
(作者:苏涌 2000年07月27日 14:03)



  TApplication是用于Delphi应用程序的类型,该类在单元forms中声明。TAp
plication是Delphi构造 Windows应用程序所需的类型,其方法和属性集中包括了
 Windows操作系统中创建、运行和销毁应用程序等既定的基本操作和属性,因此
在用Delphi编写 Windows应用程序时简化了用户和Windows环境之间的借口。TAp
plication封装了以下功能: 



Windows消息处理。 

上下文联机帮助。 

菜单加速和键盘处理。 

异常处理。 

管理由Windows操作系统为应用程序定义的基本部分,如主窗口、窗口类等。 



  每个Delphi应用程序自动声明一个 Application变量作为应用程序的实例。
如果Delphi应用程序不是一个Web服务器应用程序,那么该变量一定是TApplicat
ion类型。因此TAppli-cation不需要出现在组件选择板(component palette)中,
并在窗体设计器(form designer)中也不能对其进行可视化操作,故TApplicatio
n不具有发布属性(published properties)。不过,TApplication的公共属性(pu
blic properites)在设计时(design-time)是可以设置或修改的,如在Project|O
ptions对话框的Forms和Application页面中。 



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



  属性Active指明了应用程序是否处于活动状态且拥有焦点。定义如下: 

  property Active: Boolean; 

  Active是只读属性。当应用程序是活动状态时Active为True,否则为False。
TApplica-tion的构造器(constructor) 置Active为True。如果窗口或应用程序拥
有焦点,那么该应用程序是活动的。当其它应用程序的窗口成为活的时,当前应
用程序即为非活动的。应用程序关闭时TApplication的析构器(destructor) 置A
ctive为False。 

  在应用程序中,可以用一个计时器(TTimer)来检查属性Active的值,从而确
定当前的应用程序是否是活动状态,以便作出相应的处理。也可以在事件OnActi
ve和事件OnDeactive中定义指定的操作。 



属性DialogHandle 

  属性DialogHandle提供使Delphi应用程序使用非Delphi对话框的一种机制。
定义如下: 

  property DialogHandle: HWnd; 

  当使用API函数CreateDialog创建一个非模式化对话框时需要使用 DialogHa
ndle,并且需要查看应用程序消息循环中的消息以进行相应的操作。比如,当一
个非模式化对话框收到一条激活消息(WM_NCACTIVATE)时可以将其句柄赋值到 Di
alogHandle,当对话框收到一条解除激活消息时置DialogHandle为0。 

属性ExeName 

  属性ExeName包含了可执行的应用程序文件名极其路径信息。定义如下: 

  property ExeName: string; 

  ExeName是只读属性。使用ExeName能够得到应用程序可执行文件的文件名。
 

  这是一个很有用的属性。例如,运行光盘中的应用程序 f:\media\myapp.ex
e 时,可能需要访问目录 f:\media\data\ 中的文件或者确定应用程序所在的驱
动器盘符。 这时可以使用Delphi提供的函数ExtractFilePath和ExtractFileNam
e对属性ExeName 进行解析,从而得到需要的信息。 

属性Handle 

  属性Handle提供了对应用程序主窗口句柄的访问。定义如下: 

  property Handle: HWND; 

  当调用一个需要父窗口句柄的 Windows API函数时需要使用Handle属性。例
如,应用程序中某个动态链接库(DLL) 可能需要父窗口句柄以使得其自身能够弹
出并且显示在最前端。使用Application.Handle构成应用程序的若干窗口,使得
这些窗口在应用程序中能够被最小化、恢复、有效或无效。注意:编写一个使用
 VCL窗体的动态链接库时,应将主运行程序中主窗口的句柄赋值到该动态链接库
的Application.Handle属性。这样就使得动态链接库的窗体成为主应用程序的一
部分。需要特别指出的是,永远不要在EXE应用程序中给Application.Handle赋值
。 

属性HelpFile 

  属性HelpFile指明了应用程序用于显示帮助内容的文件名。定义如下: 

  property HelpFile: string; 

  使用HelpFile是为了应用程序拥有一个使用标准Windows帮助系统的帮助文件
。Windows显示由HelpFile属性指明的帮助文件。要让应用程序实现这一点,必须
在运行时为HelpFile属性赋予一个文件名的值,或者在设计时Project|Options对
话框的Application页面中指定一个帮助文件。默认情况下,HelpFile是一个空串
(''),并且应用程序的帮助方法忽略所有的试图显示帮助。如果HelpFile包括任
何内容,帮助主题的方法将根据文件名调出 Windows帮助系统以提供联机帮助。
 

  注意:如果活动窗口的帮助文件已指定,则该文件将优先于应用程序的帮助
文件显示。 

属性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属性值。 



属性HintHidePause 

  属性HintHidePause 指定了鼠标尚未从控件或菜单项上移开、在隐藏帮助提
示之前的时间间隔。定义如下: 

  property HintHidePause: Integer; 

  用HintHidePause以毫秒为单位指定等待时间,在TApplication 的构造器中
该属性被置为2500毫秒(2.5秒)。控件或菜单项的帮助提示在Hint属性中指定。 


  注意:默认应将HintHidePause的值预先确定为HintPause属性值的3到5倍较
合适。 

属性MainForm 

  属性MainForm唯一标识了应用程序的主窗体。定义如下: 

  property MainForm: TForm; 

  属性MainForm指定的窗体不一定等同于应用程序的主窗口。属性MainForm的
值一定是由方法CreateForm创建的所有窗体中的第一个窗体,但该窗体未必是应
用程序的主窗口。新建一个工程时,MainForm属性值自动置为Form1。在设计时可
通过Project|Options对话框中的 

Forms页面在多个窗体中指定其中之一为MainForm。 

  在运行时是不能修改MainForm属性的,因为该属性是只读的。 

  主窗体是应用程序主题创建的第一个窗体。主窗体关闭即应用程序终止。 


  在应用程序中,可以调用方法Application.MainForm.Close来终止应用程序
运行,可以获取Application.MainForm.Top、Application.MainForm.Left 等属
性的值从而确定当前活动窗口的位置以及尺寸等。 



属性ShowMainForm 

  属性ShowMainForm确定了是否在应用程序启动时显示主窗体。定义如下: 


  property ShowMainForm: Boolean; 

  应用程序用ShowMainForm属性控制是否以及何时显示其主窗体。 

  TApplication的构造器置ShowMainForm为True。默认情况下主窗体将被显示
,MainForm属性中指明了主窗体。 

  如果需要在应用程序启动时隐藏主窗体,那么应在主工程文件中调用 Appli
cation.Run之前置ShowMainForm为False,并且确信主窗体的Visible属性值为Fa
lse。这在许多实现OLE自动化服务器是很有用的,比如在启动自动化服务时隐藏
服务器程序的主窗体。 

  另外,如果需要在应用程序启动时显示一个闪出图片(Flash) 并为应用程序
的环境做一些准备,同时需要禁止主窗体显示,这也可以利用属性ShowMainForm
来实现。比如Delphi启动时就禁止了主窗体的显示。 



属性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以确
定是否需要终止运算从而终止应用程序。 

属性UpdateFormatSettings 

  属性UpdateFormatSettings指明了当用户改变系统配置时应用程序是否自动
更新格式设置。定义如下: 

  property UpdateFormatSettings: Boolean; 

  使用UpdateFormatSettings属性应用程序可以控制自动更新格式设置。TApp
lication的构造器置该属性为True。当应用程序收到消息WM_WININICHANGE时将检
查UpdateFormatSett-ings属性。建议使用默认的格式设置,也就是Windows本地
的设置。可以置UpdateFormatSe-ttings为False以避免在Delphi应用程序执行期
间改变格式设置。 



属性UpdateMetricSettings 

  属性UpdateMetricSettings属性指明是否对提示窗口字体和图标标题等相关
设置进行更新。定义如下: 

  property UpdateMetricSettings: Boolean; 

  UpdateFormatSettings属性指明系统中提示窗口字体和图标标题等设置改变
是否反映到应用程序中相关设置的改变。 

  TApplication的构造器置UpdateMetricSettings的初始值为True。 



方法BringToFront 

  方法BringToFront设置应用程序中最近一次的活动窗口到桌面上所有窗口的
最前端。其 

定义如下: 

  procedure BringToFront; 

  用BringToFront方法可以找到属于主窗体的最近一次的活动窗口并且将其置
于最前端。 

BringToFront方法也可以测试和查看一个窗口在成为最前端窗口之前是否是可见
 (Visible) 

和有效的(Enabled) 。 

  例如,当应用程序收到邮件时,可能需要将专门的处理程序激活并置于Wind
ows 桌面的 

最前端。这时就可以调用Application.BringToFront方法来实现。 



方法CreateForm 

  方法CreateForm方法用于创建新的窗体(form)。定义如下: 

  procedure CreateForm(FormClass: TFormClass; var Reference); 

  Delphi应用程序总会调用CreateForm方法。因此程序员很少有必要直接调用
CreateForm方法。一个典型的Delphi工程在工程的主体代码部分包括一处或多处
调用CreateForm方法,并且在使用窗体设计器时自动控制窗体的创建。也可以在
运行时可以调用CreateForm方法来动态创建窗体。 

  CreateForm方法根据FormClass 参数创建一个新的指定的窗体并且将窗体赋
予到变量参 

数Reference。 新创建的窗体的所有者就是对象Application。 应用程序将第一
个调用Cre- 

ateForm 创建的窗体默认为工程的主窗体。 



方法HandleException 

  方法HandleException为应用程序的异常提供默认的句柄。定义如下: 

  procedure HandleException(Sender: TObject); 

  方法HandleException 对于编写特定组件的作者来说是很有用的,因为它可
以产生一个不必对Windows 消息产生响应的事件。在应用程序中可以利用OnExce
ption 事件句柄将其它的异常操作控制在自定义的代码中。 

  在应用程序代码中,如果异常跳过了所有的try 块,那么应用程序将自动调
用HandleE-xception方法,并将显示一个提示有错误发生的对话框。除非异常对
象是EAbort,此时Han-dleException将调用OnException句柄(如果存在),否则将
调用ShowException显示一个提示有错误发生的对话框。 



方法UnhookMainWindow 

  UnhookMainWindow方法用于释放由HookMainWindow方法挂在主窗体的程序。
定义如下: 

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

  procedure UnhookMainWindow(Hook: TWindowHook); 

  用UnhookMainWindow可以释放挂钩窗口。在参数Hook中指明对话框过程。 


  TwindowHook 类型是调用HookMainWindow方法的参数。该参数是非Delphi对
话框中调用 

对话程序的方法指针。对话程序与窗口程序相似,都是为对话框处理消息,只是
语法不同。 

事件OnActivate 

  当应用程序成为活动状态时OnActivate事件发生。定义如下: 

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

  property OnActivate: TNotifyEvent; 

  用OnActive事件编写一个事件句柄来完成当应用程序成为活动状态时指定特
别的处理。 

  当一个Windows 应用程序最初运行时或其焦点从另一个Windows 应用程序转
移回到当前 

应用程序时,该应用程序成为活动状态。 



事件OnDeactivate 

  当应用程序成为非活动状态时OnDeactivate事件发生。定义如下: 

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

  property OnDeactivate: TNotifyEvent; 

  在应用程序成为非活动状态之前可以立即触发OnDeactive事件,从而完成在
该事件句柄 

中指定的特别处理。当用户从当前应用程序转换到另一应用程序时,当前应用程
序的OnDea- 

ctive事件即发生。 

事件OnException 

  当应用程序中的某个无句柄的异常发生时事件OnException发生。定义如下:
 

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

  property OnException: TExceptionEvent; 

  可以通过OnException 事件来改变在应用程序中无句柄的异常发生时的默认
动作。在方 

法TApplication.HandleException方法中,OnException 事件句柄被自动调用。
 

  OnException 事件仅用于处理在进行消息处理时发生的异常。在Applicatio
n.Run 执行 

前或执行后发生的异常不会导致OnException事件发生。 

  如果某个异常在应用程序代码的try 块中被忽略,那么应用程序将自动调用
HandleExc- 

eption方法。除非异常对象是EAbort,此时HandleException 将调用OnExceptio
n句柄(如果 

存在), 否则将调用ShowException 显示一个提示有错误发生的对话框。 

  TExceptionEvent类型是OnException事件的类型,该类型在应用程序中指向
一个处理异 

常的方法。参数Sender是引发异常的对象,而参数E 是异常对象。 



事件OnHelp 

  当应用程序收到帮助请求时OnHelp事件发生。定义如下: 

  type THelpEvent = function (Command: Word; Data: Longint; var Call
Help: Boo- 

lean): Boolean of object; 

  property OnHelp: THelpEvent; 

  用OnHelp编写一个事件句柄以完成有请求帮助时特别的处理。HelpContext方
法和Help- 

Jump方法自动引发OnHelp事件。 

  在事件发生之后置CallHelp为True使VCL调用WinHelp;置CallHelp为False以
防止VCL调 

用WinHelp。 Delphi应用程序中所有与帮助有关的方法都经过OnHelp事件。仅当
OnHelp事件 

中的CallHelp参数返回True或OnHelp事件没有被指定到有效的句柄时,WinHelp被
调用。 

事件OnHint 

  当鼠标指针移动经过某个控件或菜单项并且该控件或菜单项能够显示帮助提
示时,事件 

OnHint发生。定义如下: 

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

  property OnHint: TNotifyEvent; 

  用OnHint编写的事件句柄能够在OnHint事件发生时执行指定的操作。当用户
停放鼠标指 

针在某个控件上,并且该控件的Hint属性值不是空串(''),这时OnHint事件将发
生。 

  通常用OnHint事件显示控件或菜单项Hint属性的值作为某个面板控件(如TSt
atusBar)的 

标题,因此把面板(panel) 用作状态栏(status bar)。当OnHint事件发生时,Hi
nt属性通常 

被指定为一个帮助提示(Help Hint)和一个在别处显示的长提示(longer hint)。
 



事件OnIdle 

  当应用程序成为空闲状态时OnIdle事件发生。定义如下: 

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

  property OnIdle: TIdleEvent 

  用OnIdel编写一个事件句柄当应用程序空闲时完成指定的操作。当应用程序
不执行任何 

代码时即为空闲的。例如,当应用程序等待用户输入时该应用程序是空闲的。 


  TIdelEvent类型是OnIdel事件的类型,它指向一个当应用程序空闲时运行的
方法。对象 

TIdelEvent有一个默认为True的布而变量Done。当Done为True时,Windows API 
函数WaitM- 

essage将在OnIdel返回时被调用。WaitMessage 使其它应用程序得到控制焦点直
到应用程序 

的消息队列中出现一条新的消息。当参数Done为False 且应用程序不忙时,应用
程序不会使 

其它应用程序得到控制焦点。 

  当应用程序转为空闲状态时,OnIdel事件仅发生一次,直到参数Done置为Tr
ue才可能发 

生下一次OnIdel事件。应用程序置Done为False消除了紊乱的CPU时间计数,而该
计数可能影 

响整个系统的性能。 



Delphi程序示例 

interface 



uses 

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialo
gs, 

ComCtrls; 



type 

TForm1 = class(TForm) 

  StatusBar1: TStatusBar; 

  procedure FormCreate(Sender: TObject); 

private 

  { Private declarations } 

public 

  procedure CustomDisplayHint(Sender: TObject);    //Line 16 

  { Public declarations } 

end; 



var 

Form1: TForm1; 



implementation 



{$R *.DFM} 



procedure TForm1.CustomDisplayHint(Sender: TObject); 

begin 

StatusBar1.SimpleText := GetLongHint(Application.Hint);//Line 29 

end; 



procedure TForm1.FormCreate(Sender: TObject); 

begin 

Application.OnHint := CustomDisplayHint;       //Line 34 

end; 



end. 



  在上面的代码中,第16行是开发者定义的用于事件OnHint的方法 CustomDis
playHint; 

第29行是该方法的实现部分,将Application.Hint中的长提示解析出来,并在状
态栏中显示 

出来;第34行是在窗体创建时将方法CustomDisplayHint 与事件Application.On
Hint的句柄 

相关联。当鼠标移动并停留在某个控件(如按钮)上时,如果该控件各级宿主对象
的ShowHint 

属性(如果有)的值都为True并且其ShowHint属性的值也为True,那么该控件的Hi
nt属性值中 

的短提示将以提示窗口的形式浮动显示出来,而相应的长提示则按照事件句柄中
的指定操作 

将显示在状态栏中。 

--
我能翻译善写作熟电脑会说话可是为什么没工作?

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.104.221.250]

[关闭][返回]