系统自动创建登陆窗口LOGINFORM,登陆成功后创建MAINFORM,这是个mdiform,点它的菜单生成子窗口,这个子窗口属性是mdichild.如果直接创建MAINFORM,调用子菜单没有问题,先创建LOGINFORM就不成了。提示:‘cannot create form.no mdi forms are currently active.'谢谢。
把你的Project内的代码按照这个修改一下 begin Application.Initialize; Frm_Login := TFrm_Login.Create(nil); Application.CreateForm(TTrm_Main, Frm_Main); if Frm_Login.ShowModal=mrYes then Frm_Login.Release else Application.terminate; Application.Run; end. 应该没问题的其中 if Frm_Login.ShowModal=mrYes then 是登录密码验证窗体,mrYes表示验证通过
1. 项目单元如下: begin Application.Initialize; Application.ShowMainForm:=false; //程序不显示主窗口 Application.CreateForm(TForm_main, Form_main); //创建主窗口 Application.Run; end. 2. Main单元的OnCreate如下: begin FrmLog:= TFrmLog.Create(Application); //创建登陆窗口 if FrmLog.ShowModal=mrOK then self.show //登陆的密码正确,则显示自己 else Application.Terminate; //否则,程序结束 end; 3. login单元如下: var FrmLog: TFrmLog; ErrTime: Integer; //密码输入次数,全局变量implementation uses Main; //引用主窗口 {$R *.dfm}procedure TFrmLog.FormCreate(Sender: TObject); begin ADOQuery1.Open; //查询密码 ErrTime:=0; //给输入密码次数赋初值 end;procedure TFrmLog.Button1Click(Sender: TObject); begin if ErrTime>=2 then begin ModalResult:=mrCancel; //密码错误3次,自动关闭,给主窗口返回值mrCancel Exit; end; if Edit1.Text<>ADOQuery1.FieldByName('pswd').AsString then begin //密码错误 inc(ErrTime); MessageDlg('密码错误,请重新输入!',mtWarning,[mbOK],0); Edit1.Text:=''; Exit; end; ModalResult:=mrOK; //密码正确,自动关闭,给主窗口返回值mrOK end;end.被ShowModal的窗体,只要有ModalResult:=[mrOK,mrCancel,mrAbort,..]等,就会自动关闭,并返回相应的值。如果点击右上角的X关闭之,则自动返回mrCancel。不妨把“取消“按钮的ModalResult属性设为mrCancel,这样,用户点击“取消”也会自动关闭窗口,并返回值mrCancel
begin
Application.Initialize;
Frm_Login := TFrm_Login.Create(nil);
Application.CreateForm(TTrm_Main, Frm_Main);
if Frm_Login.ShowModal=mrYes then
Frm_Login.Release
else
Application.terminate;
Application.Run;
end.
应该没问题的其中 if Frm_Login.ShowModal=mrYes then 是登录密码验证窗体,mrYes表示验证通过
begin
Application.Initialize;
Application.ShowMainForm:=false; //程序不显示主窗口
Application.CreateForm(TForm_main, Form_main); //创建主窗口
Application.Run;
end.
2. Main单元的OnCreate如下:
begin
FrmLog:= TFrmLog.Create(Application); //创建登陆窗口
if FrmLog.ShowModal=mrOK then self.show //登陆的密码正确,则显示自己
else Application.Terminate; //否则,程序结束
end;
3. login单元如下:
var
FrmLog: TFrmLog;
ErrTime: Integer; //密码输入次数,全局变量implementation
uses Main; //引用主窗口
{$R *.dfm}procedure TFrmLog.FormCreate(Sender: TObject);
begin
ADOQuery1.Open; //查询密码
ErrTime:=0; //给输入密码次数赋初值
end;procedure TFrmLog.Button1Click(Sender: TObject);
begin
if ErrTime>=2 then
begin
ModalResult:=mrCancel; //密码错误3次,自动关闭,给主窗口返回值mrCancel
Exit;
end;
if Edit1.Text<>ADOQuery1.FieldByName('pswd').AsString then
begin //密码错误
inc(ErrTime);
MessageDlg('密码错误,请重新输入!',mtWarning,[mbOK],0);
Edit1.Text:='';
Exit;
end;
ModalResult:=mrOK; //密码正确,自动关闭,给主窗口返回值mrOK
end;end.被ShowModal的窗体,只要有ModalResult:=[mrOK,mrCancel,mrAbort,..]等,就会自动关闭,并返回相应的值。如果点击右上角的X关闭之,则自动返回mrCancel。不妨把“取消“按钮的ModalResult属性设为mrCancel,这样,用户点击“取消”也会自动关闭窗口,并返回值mrCancel