Application
1,TApplication定义在Forms单元中TComponent->TApplication
2,只有基于窗体的Delphi应用程序才有全局Application对像,Console(控制台)程序与服务程序没有Application对像,一个EXE只有一个Application全局对像.
3,Application可做为属主对像创建组件,当Application释放时,会先自动释放他的从属对像,如果组件的属主为nil则要手工释放,否则有可能造成内存泄漏,
在这里也说明了,Application.CreateForm(TForm1,Form1)与Form1:=TForm1.Create(Application)是相同的,而与Form1:=TForm1.Create(nil)是有区别的,主要是
属主对像的区别,特别是做Logo窗口与Login窗口时,窗体的属主必须是nil,下面是一段Login窗体的DPR文件代码可以叁考使用
-----------------------------------------------------------------
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {FrmLogin},
DataMoudle in 'DataMoudle.pas' {DataModule2: TDataModule},
Main in 'Main.pas' {MainForm};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TDataModule2, DataModule2);//必须先建立数据模块才能使用数据连接
FrmLogin := TFrmLogin.Create(nil);
FrmLogin.ShowModal;//FrmLogin关掉后才会执行下面的代码
if FrmLogin.Tag = 1 then
Application.CreateForm(TMainForm, MainForm);//第一个窗体不用Show他自己就会显示出来,他就是主窗体,
FrmLogin.Free;//必须手工调用Free
Application.Run;
end.
-----------------------------------------------------------------
下面的代码是做Logo窗口,并且二个窗口有延时启动
-----------------------------------------------------------
注意二个过程
1,如下是写在Project里面的
begin
Application.Initialize;
Splash:=TSplash.Create(Application); //创建Splash
Splash.Show; //显示Splash
Splash.Update; //更新Splash
Application.CreateForm(TForm1, Form1);
Splash.Free; //删除Splash
Application.Run;
end.
2,如下是写在主窗体里面的
procedure TForm1.FormCreate(Sender: TObject);
var
CurTime:LongWord;
DelayTime:LongWord;
begin
//设置延迟时间为5秒
DelayTime:=5000;
CurTime:=GetTickCount;
while(GetTickCount<(CurTime+DelayTime))do;
//在这儿可以加上应用程序的初始化过程
end;
其实上面GetTickCount函数是取得开机以来过的时间秒数
只写一行Sleep(5000)就行了.
-----------------------------------------------------------
4,Application.ExeName->返回EXE文件的全路径名与文件名,
①可以用ExtractFilePath(Application.ExeName)取EXE的全路径名后面代'\'号,
②ExtractFileName(Application.ExeName.)取EXE的文件名,
③ExtractFileExt(Application.ExeName)取EXE的扩展名
④ExtractFilePath(ParamStr(0))=ExtractFilePath(Application.ExeName)在EXE使用桌面快捷方式时,请用ExtractFilePath(ParamStr(0))来取EXE的全路径
5,Application.MainForm应用程序的主窗体,只读属性,只能通过Project->Options->MainForm来指定,或是手工改写DPR文件.

6,Application.Handle提供了对应用程序主窗口的句柄访问,Handle属性是一个HWND(标识WIN32 API的窗口句柄)
7,Application.ShowMainForm设置应用程序启动时是否显示主窗体,一旦把它设为False应用程序看到不任何界面,在桌面的任务栏里也没有应用程序的信息
只有在进程中结束,
8,Application.CreateFormw创建一个窗体实例.
9,Application.HandleException用于显示应用程序中出现异常的有关信息,如果希望用自己的方式显示异常信息,可以使用Application.OnException事件
10,Application.ProcessMessage用于从Windows消息队列中检索任何等待处理消息并进行处理,当使用Progress组件时,要使用此属性否则进度条显示不正常.

11,Application.Terminate终止应用程序的执行,Application.Terminate会调用Windows的PostQuitMessage向应用程序的消息队列中发一个退出消息(WM_Quit),VCL
据此消息释放应用程序所创建的所有实例.
关于代码终止还有如下几个方法
①Exit->如果它写在DPR里,将终止应用程序,如果写在单元代码里,不执行Exit后面的代码,返回程序入口点,并不关闭应用程序.注意:如果在 try 块中,except 和 finally 中的代码会被执行.
②Halt->不论写在哪里,立刻中断应用程序,而且不释放资源,用的是Windows的API直接杀死应用程序进程
③Break->跳出一个循环
④Continue->跳过当前循环,续继执行下一个循环
⑤RunError(i:Word)->不论你写在DPR还是Unit终止程序运行,并产生一个运行期错误,错误号最大只能为255
⑥Abort->这个方法定义在SysUitls里,终止程序运行,但并不关闭应用程序,如果写在DPR里,会关闭应用程序,并报错,写在UNIT里与Exit相当,只不过执行指针停在原处.如果在 try 块中,except 和 finally 中的代码会被执行.
并不返回程序入口处.
⑦GoTo语句->我一直喜欢GoTo语句,我想和我一样从DOS时代写过来的人都喜欢GoTo语句吧,不知道哪个神经病先说的,不要使用GoTo语句,GoTo语句相当自由,想
去哪儿执行就去哪儿执行,不可以跨语句块执行,标签必须定义在语句块内,下面出一个GoTo语句的例子1+.2+..100
procedure TForm1.Button1Click(Sender: TObject);
Label AA;//前面不要加任何申明
var
sum, i : Integer;
begin
sum:=0;
i:=0;
AA://一个goto标签只能使用一次
sum := sum + i;
Inc(i);
if i<=100 then goto AA;
Caption:=IntToStr(sum);
end;
12,Application.OnMessage Windows发往应用程序的所有消息都要经过这个事件

下面举个例子,让所有窗口不能移动,这个功能在工程中很常用到
//----------------------------------------------------------------------
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);//不要把这个Handled设为True
begin
if (Msg.message=161) then Msg.message := 0;//这样窗口不动能,当然窗口上的按钮也不起作用
end;
//-------------------------------------------------------------------------
当然,如果要让窗体上按钮可以用,那要拦截每个窗体的消息,代码如下
//---------------------------------
procedure TF_UserCheck.LockForm(var MSG: TMessage); //message WM_NCHITTEST;
begin
inherited;
if (MSG.Result=2) then Msg.Result:=HTCLIENT;
end;
//------------------------------------
13,Application.OnException,当应用程序中的无句柄异常发生时,就会触出此事件,可以在这个事件内给出提示.
--------------------------------------------------------------------------------------------------------------------------
DoubleCat QQ:28088191
浙公网安备 33010602011771号