Delphi中的Application对象.docx
《Delphi中的Application对象.docx》由会员分享,可在线阅读,更多相关《Delphi中的Application对象.docx(41页珍藏版)》请在冰豆网上搜索。
Delphi中的Application对象
Delphi中的Application对象
TApplication是用于Delphi应用程序的类型,该类在单元forms中声明。
TApplication是Delphi构造Windows应用程序所需的类型,其方法和属性集中包括了Windows操作系统中创建、运行和销毁应用程序等既定的基本操作和属性,因此在用Delphi编写Windows应用程序时简化了用户和Windows环境之间的借口。
TApplication封装了以下功能:
Windows消息处理
上下文联机帮助
菜单加速和键盘处理
异常处理
管理由Windows操作系统为应用程序定义的基本部分,如主窗口、窗口类等
每个Delphi应用程序自动声明一个Application变量作为应用程序的实例。
如果Delphi应用程序不是一个Web服务器应用程序,那么该变量一定是TApplication类型。
因此TAppli-cation不需要出现在组件选择板(componentpalette)中,并在窗体设计器(formdesigner)中也不能对其进行可视化操作,故TApplication不具有发布属性(publishedproperties)。
不过,TApplication的公共属性(publicproperites)在设计时(design-time)是可以设置或修改的,如在Project|Options对话框的Forms和Application页面中
下面就向大家介绍TApplication中的大部分属性、方法和事件
属性Active
属性Active指明了应用程序是否处于活动状态且拥有焦点。
定义如下:
propertyActive:
Boolean;
Active是只读属性。
当应用程序是活动状态时Active为True,否则为False。
TApplica-tion的构造器(constructor)置Active为True。
如果窗口或应用程序拥有焦点,那么该应用程序是活动的。
当其它应用程序的窗口成为活的时,当前应用程序即为非活动的。
应用程序关闭时TApplication的析构器(destructor)置Active为False
在应用程序中,可以用一个计时器(TTimer)来检查属性Active的值,从而确定当前的应用程序是否是活动状态,以便作出相应的处理。
也可以在事件OnActive和事件OnDeactive中定义指定的操作
属性DialogHandle
属性DialogHandle提供使Delphi应用程序使用非Delphi对话框的一种机制。
定义如下:
propertyDialogHandle:
HWnd;当使用API函数CreateDialog创建一个非模式化对话框时需要使用DialogHandle,并且需要查看应用程序消息循环中的消息以进行相应的操作。
比如,当一个非模式化对话框收到一条激活消息(WM_NCACTIVATE)时可以将其句柄赋值到DialogHandle,当对话框收到一条解除激活消息时置DialogHandle为0
属性ExeName属性
ExeName包含了可执行的应用程序文件名极其路径信息。
定义如下:
propertyExeName:
string;ExeName是只读属性。
使用ExeName能够得到应用程序可执行文件的文件名
这是一个很有用的属性。
例如,运行光盘中的应用程序f:
\media\myapp.exe时,可能需要访问目录f:
\media\data\中的文件或者确定应用程序所在的驱动器盘符。
这时可以使用Delphi提供的函数ExtractFilePath和ExtractFileName对属性ExeName进行解析,从而得到需要的信息
属性Handle
属性Handle提供了对应用程序主窗口句柄的访问。
定义如下:
propertyHandle:
HWND;当调用一个需要父窗口句柄的WindowsAPI函数时需要使用Handle属性。
例如,应用程序中某个动态链接库(DLL)可能需要父窗口句柄以使得其自身能够弹出并且显示在最前端。
使用Application.Handle构成应用程序的若干窗口,使得这些窗口在应用程序中能够被最小化、恢复、有效或无效。
注意:
编写一个使用VCL窗体的动态链接库时,应将主运行程序中主窗口的句柄赋值到该动态链接库的Application.Handle属性。
这样就使得动态链接库的窗体成为主应用程序的一部分。
需要特别指出的是,永远不要在EXE应用程序中给Application.Handle赋值
属性HelpFile
属性HelpFile指明了应用程序用于显示帮助内容的文件名。
定义如下:
propertyHelpFile:
string;使用HelpFile是为了应用程序拥有一个使用标准Windows帮助系统的帮助文件。
Windows显示由HelpFile属性指明的帮助文件。
要让应用程序实现这一点,必须在运行时为HelpFile属性赋予一个文件名的值,或者在设计时Project|Options对话框的Application页面中指定一个帮助文件。
默认情况下,HelpFile是一个空串(''),并且应用程序的帮助方法忽略所有的试图显示帮助。
如果HelpFile包括任何内容,帮助主题的方法将根据文件名调出Windows帮助系统以提供联机帮助
注意:
如果活动窗口的帮助文件已指定,则该文件将优先于应用程序的帮助文件显示
属性Hint
属性Hint指明了出现在帮助提示框(HelpHintbox)中的文本字符串。
定义如下:
propertyHint:
string;TApplication.Hint属性就是鼠标正在移动经过的控件或菜单项的Hint值。
该属性也能被赋予一个向用户提供动作、错误或其它信息的字符串值。
因此,使用Hint属性也能够:
从控件传递提示信息到另一显示区,例如通过OnHint事件句柄将提示显示到状态栏中。
这时是读取Hint属性。
当应用程序正在进行某一动作时简要描述其状态。
这时是设置Hint属性。
当OnHint事件发生时帮助提示才出现。
因此,即使TApplication的Hint属性被赋予状态栏的标题,例如状态栏控件的标题显示Hint属性的当前字符串值,也应归于OnHint事件
Hint字符串包括两部分:
短提示和长提示。
短提示用于简洁的弹出提示;长提示与短提示之间用竖线"|"隔开,用于在状态栏中显示较详细的提示信息。
可以使用单元Controls中提供的字符串函数GetShortHint和GetLongHint从Hint属性中分解得到短提示和长提示
注意:
当应用程序通过设置Hint属性向用户提供某一事件发生的信息时应当切记,默认情况下,当鼠标移动经过某一控件时,Hint字符串被复位到该控件的Hint属性值
属性HintHidePause
属性HintHidePause指定了鼠标尚未从控件或菜单项上移开、在隐藏帮助提示之前的时间间隔。
定义如下:
propertyHintHidePause:
Integer;
用HintHidePause以毫秒为单位指定等待时间,在TApplication的构造器中该属性被置为2500毫秒(2.5秒)。
控件或菜单项的帮助提示在Hint属性中指定
注意:
默认应将HintHidePause的值预先确定为HintPause属性值的3到5倍较合适
属性MainForm
属性MainForm唯一标识了应用程序的主窗体。
定义如下:
propertyMainForm.:
TForm;属性MainForm指定的窗体不一定等同于应用程序的主窗口。
属性MainForm的值一定是由方法CreateForm创建的所有窗体中的第一个窗体,但该窗体未必是应用程序的主窗口。
新建一个工程时,MainForm属性值自动置为Form1。
在设计时可通过Project|Options对话框中的Forms页面在多个窗体中指定其中之一为MainForm在运行时是不能修改MainForm属性的,因为该属性是只读的
主窗体是应用程序主题创建的第一个窗体。
主窗体关闭即应用程序终止
在应用程序中,可以调用方法Application.MainForm.Close来终止应用程序运行,可以获取
Application.MainForm.Top、
Application.MainForm.Left等属性的值从而确定当前活动窗口的位置以及尺寸等
属性ShowMainForm
属性ShowMainForm确定了是否在应用程序启动时显示主窗体。
定义如下:
propertyShowMainForm.:
Boolean;应用程序用ShowMainForm属性控制是否以及何时显示其主窗体
TApplication的构造器置ShowMainForm为True。
默认情况下主窗体将被显示,MainForm属性中指明了主窗体
如果需要在应用程序启动时隐藏主窗体,那么应在主工程文件中调用Application.Run之前置ShowMainForm为False,并且确信主窗体的Visible属性值为False。
这在许多实现OLE自动化服务器是很有用的,比如在启动自动化服务时隐藏服务器程序的主窗体
另外,如果需要在应用程序启动时显示一个闪出图片(Flash)并为应用程序的环境做一些准备,同时需要禁止主窗体显示,这也可以利用属性ShowMainForm来实现。
比如Delphi启动时就禁止了主窗体的显示。
属性Terminated
属性Terminated报告应用程序是否收到终止程序的Windows消息WM_QUIT。
定义如下:
propertyTerminated:
Boolean;Terminated是只读属性。
该属性主要用于调用ProcessMessages方法时应用程序不必在停止后试图处理Windows消息。
当ProcessMessages方法收到消息WM_QUIT时,Terminated将被置为True
Delphi应用程序总会因为主窗体或应用程序关闭,或者因为Terminate方法被调用而收到消息WM_QUIT
当应用程序执行强度较大、占用系统资源较多的运算时,应当周期性地调用Applicati-on.ProcessMessages方法,并检查属性Application.Terminated以确定是否需要终止运算从而终止应用程序
属性UpdateFormatSettings
属性UpdateFormatSettings指明了当用户改变系统配置时应用程序是否自动更新格式设置。
定义如下:
propertyUpdateFormatSettings:
Boolean;使用UpdateFormatSettings属性应用程序可以控制自动更新格式设置。
TApplication的构造器置该属性为True。
当应用程序收到消息WM_WININICHANGE时将检查UpdateFormatSett-ings属性。
建议使用默认的格式设置,也就是Windows本地的设置。
可以置UpdateFormatSe-ttings为False以避免在Delphi应用程序执行期间改变格式设置
属性UpdateMetricSettings
属性UpdateMetricSettings属性指明是否对提示窗口字体和图标标题等相关设置进行更新。
定义如下:
propertyUpdateMetricSettings:
Boolean;UpdateFormatSettings属性指明系统中提示窗口字体和图标标题等设置改变是否反映到应用程序中相关设置的改变
TApplication的构造器置UpdateMetricSettings的初始值为True
方法BringToFront
方法BringToFront设置应用程序中最近一次的活动窗口到桌面上所有窗口的最前端。
其定义如下:
procedureBringToFront;用BringToFront方法可以找到属于主窗体的最近一次的活动窗口并且将其置于最前端
BringToFront方法也可以测试和查看一个窗口在成为最前端窗口之前是否是可见(Visible)和有效的(Enabled)
例如,当应用程序收到邮件时,可能需要将专门的处理程序激活并置于Windows桌面的最前端。
这时就可以调用Application.BringToFront方法来实现
方法CreateForm
方法CreateForm方法用于创建新的窗体(form)。
定义如下:
procedureCreateForm(FormClass:
TFormClass;varReference);Delphi应用程序总会调用CreateForm方法。
因此程序员很少有必要直接调用CreateForm方法。
一个典型的Delphi工程在工程的主体代码部分包括一处或多处调用CreateForm方法,并且在使用窗体设计器时自动控制窗体的创建。
也可以在运行时可以调用CreateForm方法来动态创建窗体
CreateForm方法根据FormClass参数创建一个新的指定的窗体并且将窗体赋予到变量参数Reference。
新创建的窗体的所有者就是对象Application。
应用程序将第一个调用CreateForm创建的窗体默认为工程的主窗体
方法HandleException
方法HandleException为应用程序的异常提供默认的句柄。
定义如下:
procedureHandleException(Sender:
TObject);方法HandleException对于编写特定组件的作者来说是很有用的,因为它可以产生一个不必对Windows消息产生响应的事件。
在应用程序中可以利用OnException事件句柄将其它的异常操作控制在自定义的代码中
在应用程序代码中,如果异常跳过了所有的try块,那么应用程序将自动调用HandleException方法,并将显示一个提示有错误发生的对话框。
除非异常对象是EAbort,此时HandleException将调用OnException句柄(如果存在),否则将调用ShowException显示一个提示有错误发生的对话框
方法UnhookMainWindow
UnhookMainWindow方法用于释放由HookMainWindow方法挂在主窗体的程序。
定义如下:
typeTWindowHook=function(varMessage:
TMessage):
Booleanofobject;procedureUnhookMainWindow(Hook:
TWindowHook);用UnhookMainWindow可以释放挂钩窗口。
在参数Hook中指明对话框过程
TwindowHook类型是调用HookMainWindow方法的参数。
该参数是非Delphi对话框中调用对话程序的方法指针。
对话程序与窗口程序相似,都是为对话框处理消息,只是语法不同
事件OnActivate当应用程序成为活动状态时OnActivate事件发生。
定义如下:
typeTNotifyEvent=procedure(Sender:
TObject)ofobject;propertyOnActivate:
TNotifyEvent;用OnActive事件编写一个事件句柄来完成当应用程序成为活动状态时指定特别的处理
当一个Windows应用程序最初运行时或其焦点从另一个Windows应用程序转移回到当前应用程序时,该应用程序成为活动状态
事件OnDeactivate
当应用程序成为非活动状态时OnDeactivate事件发生。
定义如下:
typeTNotifyEvent=procedure(Sender:
TObject)ofobject;propertyOnDeactivate:
TNotifyEvent;在应用程序成为非活动状态之前可以立即触发OnDeactive事件,从而完成在该事件句柄中指定的特别处理。
当用户从当前应用程序转换到另一应用程序时,当前应用程序的OnDea-ctive事件即发生
事件OnException
当应用程序中的某个无句柄的异常发生时事件OnException发生。
定义如下:
typeTExceptionEvent=procedure(Sender:
TObject;E:
Exception)ofobject;propertyOnException:
TExceptionEvent;可以通过OnException事件来改变在应用程序中无句柄的异常发生时的默认动作。
在方法TApplication.HandleException方法中,OnException事件句柄被自动调用
OnException事件仅用于处理在进行消息处理时发生的异常。
在Application.Run执行前或执行后发生的异常不会导致OnException事件发生
如果某个异常在应用程序代码的try块中被忽略,那么应用程序将自动调用HandleExc-eption方法。
除非异常对象是EAbort,此时HandleException将调用OnException句柄(如果存在),否则将调用ShowException显示一个提示有错误发生的对话框
TExceptionEvent类型是OnException事件的类型,该类型在应用程序中指向一个处理异常的方法。
参数Sender是引发异常的对象,而参数E是异常对象
事件OnHelp
当应用程序收到帮助请求时OnHelp事件发生。
定义如下:
typeTHelpEvent=function(Command:
Word;Data:
Longint;varCallHelp:
Boo-lean):
Booleanofobject;propertyOnHelp:
THelpEvent;用OnHelp编写一个事件句柄以完成有请求帮助时特别的处理。
HelpContext方法和Help-Jump方法自动引发OnHelp事件
在事件发生之后置CallHelp为True使VCL调用WinHelp;置CallHelp为False以防止VCL调用WinHelp。
Delphi应用程序中所有与帮助有关的方法都经过OnHelp事件。
仅当OnHelp事件中的CallHelp参数返回True或OnHelp事件没有被指定到有效的句柄时,WinHelp被调用
事件OnHint
当鼠标指针移动经过某个控件或菜单项并且该控件或菜单项能够显示帮助提示时,事件OnHint发生。
定义如下:
typeTNotifyEvent=procedure(Sender:
TObject)ofobject;propertyOnHint:
TNotifyEvent;用OnHint编写的事件句柄能够在OnHint事件发生时执行指定的操作。
当用户停放鼠标指针在某个控件上,并且该控件的Hint属性值不是空串(''),这时OnHint事件将发生
通常用OnHint事件显示控件或菜单项Hint属性的值作为某个面板控件(如TStatusBar)的标题,因此把面板(panel)用作状态栏(statusbar)。
当OnHint事件发生时,Hint属性通常被指定为一个帮助提示(HelpHint)和一个在别处显示的长提示(longerhint)
事件OnIdle
当应用程序成为空闲状态时OnIdle事件发生。
定义如下:
typeTIdleEvent=procedure(Sender:
TObject;varDone:
Boolean)ofobject;propertyOnIdle:
TIdleEvent用OnIdel编写一个事件句柄当应用程序空闲时完成指定的操作。
当应用程序不执行任何代码时即为空闲的。
例如,当应用程序等待用户输入时该应用程序是空闲的
TIdelEvent类型是OnIdel事件的类型,它指向一个当应用程序空闲时运行的方法。
对象TIdelEvent有一个默认为True的布而变量Done。
当Done为True时,WindowsAPI函数WaitM-essage将在OnIdel返回时被调用。
WaitMessage使其它应用程序得到控制焦点直到应用程序的消息队列中出现一条新的消息。
当参数Done为False且应用程序不忙时,应用程序不会使其它应用程序得到控制焦点
当应用程序转为空闲状态时,OnIdel事件仅发生一次,直到参数Done置为True才可能发生下一次OnIdel事件。
应用程序置Done为False消除了紊乱的CPU时间计数,而该计数可能影响整个系统的性能
Delphi程序示例
interface
uses
Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,ComCtrls;
type
TForm1=class(TForm)
StatusBar1:
TStatusBar;
procedureFormCreate(Sender:
TObject);
private
{Privatedeclarations}
public
procedureCustomDisplayHint(Sender:
TObject);
//Line16{Publicdeclarations}
end;
varForm1:
TForm1;
implementation
{$R*.DFM}
procedureTForm1.CustomDisplayHint(Sender:
TObject);
begin
StatusBar1.SimpleText:
=GetLongHint(Application.Hint);
//Line29
end;
procedureTForm1.FormCreate(Sender:
TObject);
begin
Application.OnHint:
=CustomDisplayHint;
//Line34
end;
end.
在上面的代码中,第16行是开发者定义的用于事件OnHint的方法CustomDisplayHint;
第29行是该方法的实现部分,将Application.Hint中的长提示解析出来,并在状态栏中显示出来;
第34行是在窗体创建时将方法CustomDisplayHint与事件Application.OnHint的句柄相关联。
当鼠标移动并停留在某个控件(如按钮)上时,如果该控件各级宿主对象的ShowHint属性(如果有)的值都为True并且其ShowHint属性的值也为True,那么该控件的Hint属性值中的短提示将以提示窗口的形式浮动显示出来,而相应的长提示则按照事件句柄中的指定操作将显示在状态栏中。
简介TApplication
继承关系:
TObject→TPersistent→TComponent
TApplication组件的属性:
Active
AllowTesting
DialogHandle
ExeName
Handle
HelpFile
Hint
HintColor
HintHidePause
HintPause
HintShortPause
Icon
MainForm
ShowHint
Show