最近尝试做一个管理系统,其中有登陆界面,在登录界面中要输入密码验证身份,现在我知道两种方法启动窗体
1、建立主窗体,在主窗体的OnCreate()函数中启动验证窗体。即输入
Form2 := TForm2.Create(Application);
Form2.ShowModal;
Form2.Free;
(有一个疑问,为什么showmodal之后接着free掉了?)
2、在program窗体中输入
begin
Application.Initialize;
PassWD_Form := TPassWD_Form.Create(Application);
if PassWD_Form.ShowModal = mrOK then
begin
Application.Title := '车辆调度管理系统';
Application.CreateForm(TMain_Form, Main_Form);
Application.CreateForm(TDModule, DModule);
Application.Run;
end else
Application.Run;
end.
之类的方式。
这种方式我有几个问题
1、Application.Initialize;的作用是什么?
2、是不是采用PassWD_Form := TPassWD_Form.Create(Application);方式建出来的不是主窗体,而采用
Application.CreateForm(TMain_Form, Main_Form);第一个建出来的才是主窗体。
3、Application.Run;的作用是什么?
3、对于以上两种方式我该采用那一种?或者还有什么更好的吗?
1、建立主窗体,在主窗体的OnCreate()函数中启动验证窗体。即输入
Form2 := TForm2.Create(Application);
Form2.ShowModal;
Form2.Free;
(有一个疑问,为什么showmodal之后接着free掉了?)
2、在program窗体中输入
begin
Application.Initialize;
PassWD_Form := TPassWD_Form.Create(Application);
if PassWD_Form.ShowModal = mrOK then
begin
Application.Title := '车辆调度管理系统';
Application.CreateForm(TMain_Form, Main_Form);
Application.CreateForm(TDModule, DModule);
Application.Run;
end else
Application.Run;
end.
之类的方式。
这种方式我有几个问题
1、Application.Initialize;的作用是什么?
2、是不是采用PassWD_Form := TPassWD_Form.Create(Application);方式建出来的不是主窗体,而采用
Application.CreateForm(TMain_Form, Main_Form);第一个建出来的才是主窗体。
3、Application.Run;的作用是什么?
3、对于以上两种方式我该采用那一种?或者还有什么更好的吗?
Application.Title := '监控系统';
loginForm := TLoginForm.Create(Application);
try
loginForm.ShowModal;
finally
loginForm.Free;
end; if not loginForm.bIfLoginSuccess then
begin
Application.Terminate;
end; //调用主窗口
Application.CreateForm(TFormMain, FormMain);
Application.Run;
SysInit._InitExe。_InitExe 主要是初始化 HInstance 和模块信息表等。然后 _InitExe 调用 System._StartExe。System._StartExe 调用 System.InitUnit;System.InitUnit 调用项目中所有被包含单元的 Initialization 段的代码;其中有 Controls.Initialization 段,这个段比较关键。在这段代码中建立了 Mouse、Screen 和 Application 三个关键的全局对象。 Application.Create 调用 Application.CreateHandle。Application.CreateHandle 建立一个窗口,并设置 Application.WndProc 为回调函数(这里使用了 MakeObjectInstance 方法,后面再谈)。Application.WndProc 主要处理一些应用程序级别的消息。 我第一次跟踪应用程序的执行时没有发现 Application 对象的创建过程,原来在 SysInit._InitExe 中被隐含调用了。如果你想跟踪这个过程,不要设置断点,直接按 F7 就发现了。 然后才到了 Project1 的第 1 句: Application.Initialize;
这个函数只有一句代码: if InitProc <> nil then TProcedure(InitProc); 也就是说如果用户想在应用程序的执行前运行一个特定的过程,可以设置 InitProc 指向该过程。(为什么用户不在 Application.Initialize 之前或在单元的 Initliazation 段中直接运行这个特定的过程呢?一个可能的答案是:如果元件设计者希望在应用程序的代码执行之前执行一个过程,并且这个过程必须在其他单元的 Initialization 执行完成之后执行[比如说 Application 对象必须创建],则只能使用这个过程指针来实现。) 然后是 Project1 的第 2 句: Application.CreateForm(TForm1, Form1);
这句的主要作用是创建 TForm1 对象,然后把 Application.MainForm 设置为 TForm1。 最后是 Project1 的第 3 句: Application.Run;
TApplication.Run 调用 TApplication.HandleMessage 处理消息。Application.HandleMessage 的代码也只有一行
回答:不是紧接着 , showmodal一定要返回result 或着close后 才会执行它后面的代码.
不是紧接着
showmodal后 一定要等到返回result,关闭窗体之后才会,执行后面的代码
不是紧接着
showmodal后 一定要等到返回result,关闭窗体之后才会,执行后面的代码
因为ShowModal的窗体,需要等到这个窗体关闭以后,才能执行ShowModal之后的语句1、Application.Initialize;的作用是什么?
程序初始化2、是不是采用PassWD_Form := TPassWD_Form.Create(Application);方式建出来的不是主窗体,而采用
Application.CreateForm(TMain_Form, Main_Form);第一个建出来的才是主窗体。
哪个窗体是主窗体,不是由创建方式决定的,而是在工程文件里自己定义的。
Project->Options菜单,Forms页,上面有个Main Form:这里定义的3、Application.Run;的作用是什么?
执行这个程序,开始进入消息循环3、对于以上两种方式我该采用那一种?或者还有什么更好的吗?
你喜欢用哪种就用哪种