if FLogin.ModalResult = mrOK then ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 判断是否可以登录 begin FLogin.Hide; FLogin.Free; end else Application.Terminate; Application.CreateForm(TFMainForm, FMainForm); ^^^^^^^^^^^^^^^^^^^^^^^^^^ 再创建主窗口 Application.Run; RegardsePing
splashform和passwordform其实差不多, 做passwordform的话,建一个新的窗口,将它的构造过程(Application.CreateForm(TFormPassword,FormPassword))重工程文件(dpr)中删除, 然后在formmain的oncreate中写: var FormPassword:TFormPassword; begin Show();//显示主窗口 FormPassword:=TFormPassword.Create(self); try FormPassword.ShowModal(); if FormModal.ModalResult<>mrOK then Application.Termate; finally FormPassword.Free; end; end;并在Formpassword的确定按钮的click事件中判断password,如果不符合,则返回 Modalresult:=mrCancel;至于,和formpassword和FormSplash差不多,也将自动构造去掉,并把窗体pos设为topmost,不同的是用Form.Show来显示该窗口,显示完后,可以作程序的初始化工作,之后再free掉它,如果期间想让主窗口无法相应用户操作,可以用FormMain.Enabled:=false;完了后再设回来。
某程序中工程文件中的一段: ..... begin Application.Initialize; Application.CreateForm(TForm1, Form1); ..... frmsplash:=Tfrmsplash.Create(Application);{Create创建闪现窗口对象} frmsplash.Show; frmsplash.Update; Application.CreateForm(TForm1, Form1); frmsplash.Hide; frmsplash.Free; loginform:=Tloginform.create(Application);{Create创建登录窗口对象} loginform.show; loginform.Update; while i=true do begin loginform.Hide; loginform.free; end; Application.Run;
to silverwonder(刷卡太快请重刷) while i=true do begin loginform.Hide; loginform.free; end;为什么要用循环 ? if returnResult=mrCancel then loginform.hide; loginform.free; end;
with TSplash.Create do
try
// ...
// 创建MainForm
// ...
// 创建LoginDialog
// ...
if LoginDialog.Execute then
// Run
else
// Destroy;
finally
Free;
end;
Application.CreateForm(TFDataModule, FDataModule);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
创建数据模块
FLogin := TFLogin.Create(Application);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
创建Login窗口
这里面可以调用数据模块中的验证密码的函数,
FLogin.ShowModal;
if FLogin.ModalResult = mrOK then
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
判断是否可以登录
begin
FLogin.Hide;
FLogin.Free;
end else
Application.Terminate;
Application.CreateForm(TFMainForm, FMainForm);
^^^^^^^^^^^^^^^^^^^^^^^^^^
再创建主窗口
Application.Run;
RegardsePing
做passwordform的话,建一个新的窗口,将它的构造过程(Application.CreateForm(TFormPassword,FormPassword))重工程文件(dpr)中删除,
然后在formmain的oncreate中写:
var
FormPassword:TFormPassword;
begin
Show();//显示主窗口
FormPassword:=TFormPassword.Create(self);
try
FormPassword.ShowModal();
if FormModal.ModalResult<>mrOK then
Application.Termate;
finally
FormPassword.Free;
end;
end;并在Formpassword的确定按钮的click事件中判断password,如果不符合,则返回
Modalresult:=mrCancel;至于,和formpassword和FormSplash差不多,也将自动构造去掉,并把窗体pos设为topmost,不同的是用Form.Show来显示该窗口,显示完后,可以作程序的初始化工作,之后再free掉它,如果期间想让主窗口无法相应用户操作,可以用FormMain.Enabled:=false;完了后再设回来。
某程序中工程文件中的一段:
.....
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
.....
frmsplash:=Tfrmsplash.Create(Application);{Create创建闪现窗口对象}
frmsplash.Show;
frmsplash.Update;
Application.CreateForm(TForm1, Form1);
frmsplash.Hide;
frmsplash.Free; loginform:=Tloginform.create(Application);{Create创建登录窗口对象}
loginform.show;
loginform.Update;
while i=true do
begin
loginform.Hide;
loginform.free;
end; Application.Run;
begin
loginform.Hide;
loginform.free;
end;为什么要用循环 ? if returnResult=mrCancel then
loginform.hide; loginform.free; end;