您好,请教 Application.Run 的含义 ,谢谢(20分)

  • 主题发起人 主题发起人 驿路的梦
  • 开始时间 开始时间
驿

驿路的梦

Unregistered / Unconfirmed
GUEST, unregistred user!
program Project1;

uses
Forms,
Unit1 in 'Unit1.pas' {Frmmain},
Unit2 in 'Unit2.pas' {frmLogin},
Unit4 in 'Unit4.pas' {DataModule4: TDataModule};

{$R *.res}

begin
Application.Initialize;
Application.CreateForm(TDataModule4,DataModule4);
with TfrmLogin.Create(Application) do
begin
ShowModal;
if ModalResult = 2 then
begin
Close ;
Application.Terminate;
end
else
if ModalResult = 1 then
begin
Close;
Application.CreateForm(TFrmmain, Frmmain);
Application.Run; // 程序运行到这儿,会自动弹出 Frmmain, 然而这儿并没有 Frmmain.Show
//或其他显示语句,也就是说,这儿的Application.Run 为何可以弹出窗体 ?
//书上说 Application.Run 的作用是启动Application的消息队列
// 为何 ? 谢谢
end;
end;
end.

 
其实是Application.CreateForm(TFrmmain, Frmmain);弹出的
不是Application.Run
 
源码写得很清楚
procedure TApplication.Run;
begin
FRunning := True;
try
AddExitProc(DoneApplication);
if FMainForm <> nil then //如果有主窗体
begin
case CmdShow of
SW_SHOWMINNOACTIVE: FMainForm.FWindowState := wsMinimized;
SW_SHOWMAXIMIZED: MainForm.WindowState := wsMaximized;
end;
if FShowMainForm then //如果application.Showmainform属性是真
if FMainForm.FWindowState = wsMinimized then
Minimize else
FMainForm.Visible := True;//显示主窗体
repeat
try
HandleMessage;
except
HandleException(Self);
end;
until Terminated;
end;
finally
FRunning := False;
end;
end;
 
TA p p l i c a t i o n . C r e a t e F o r m ( )会检查
M a i n F o r m属性是否为n i l。如果是的话,C r e a t e F o r m ( )会把新创建的窗体作为主窗体。
一般情况下,不
要调用C r e a t e F o r m ( ),而要调用窗体本身的C r e a t e ( )。



Delphi 5会自动把R u n ( )放到项目文件的主代码块中。不要自己去调用这个方法,但需要知道这个
方法到底干了些什么。首先, TA p p l i c a t i o n . R u n ( )建立一个退出过程,以保证当应用程序退出运行时所
有的组件都会得到释放。然后,它就建立一个循环来处理消息,直到应用程序终止。
 
多人接受答案了。
 
后退
顶部