看看Project Options中的Main Form是什么.
将登陆窗口的创建和显示(ShowModal)放在主窗口的OnCreate中试试.

解决方案 »

  1.   

    这种问题我也遇到过,
    我是没有办法了,只好不设MDI窗体.
      

  2.   

    登录+主窗体+MDI窗体:登录→主窗体→MDI窗体,打开MDI窗体时报错,但如果去掉登录窗体(主窗体→MDI窗体)就能够正常打开MDI窗体
    代码:
    不太明白你的主窗体和MDI窗体是什么关系,一个程序中,如果是MDI形式的话,那么它的主窗体也就应该是MDI的啊;
    其实MDI形式的登录也和一般的窗体登录是一样的,都与在项目文件中
    program Project1;uses
      Forms,
      Unit1 in 'Unit1.pas' {Form_Entry},
      Unit2 in 'Unit2.pas' {Form_Major},
      Unit3 in 'Unit3.pas' {Form_Lend_Book};{$R *.RES}begin
      Application.Initialize;
      Application.CreateForm(TForm_Entry, Form_Entry);//你这儿已经把登录窗体做为主窗体用了,所以,它一关,肯定程序就都关了;
      Application.CreateForm(TForm_Major, Form_Major);//它却成了delphi自动建立的窗体了;
      Application.Run;
    end.你做如下的改进试一试,应该是可以的;program Project1;uses
      Forms,
      Unit1 in 'Unit1.pas' {Form_Entry},
      Unit2 in 'Unit2.pas' {Form_Major},
      Unit3 in 'Unit3.pas' {Form_Lend_Book};{$R *.RES}begin
      Application.Initialize;
     Form_Enty := TForm_Enty.Create(application);
      ....// form_enty窗体和项目文件之间的关系的初始化
     form_enty.Showmodal;
      if ... then//用一个全局变量看是否退出
      application.Terminate
      Application.CreateForm(TForm_Major, Form_Major;
     Application.Run;
    end.
    下边的还用你以前的代码!
      

  3.   

    首先把你的思维转了过来,如果在登录窗体的话,最好放在项目文件中,但不能做为主窗体出现,而你上边的程序却有意无意的将登录窗体作为了主窗体,不信的话你可以 shift+ctrl+f11看一看你的主窗体是不是登录窗体!
      

  4.   

    来自:Nizvoo, 时间:2002-5-16 13:06:00, ID:1104207 | 编辑 
    看看我的代码先
    注意:没大改动的例子,要是同事看着请!!!·······~~~~
    program Workgb;uses
      Forms,
      Sysutils,
      ConstFrm in 'SOURCE\ConstPas.pas',
      LoginFrm in 'SOURCE\LoginFrm.pas' {frmLogin},
      WorkgbFrm in 'SOURCE\WorkgbFrm.pas' {frmWorkgb};{$R *.RES}begin
      Application.Initialize;
      Application.Title := 'XXXXXX编写'; //改一下,要是同事看着不好。
      LoginInf := TLoginInf.Create;
      LoginInf.WorkPath := ExtractFilePath(Application.ExeName);
      if not LoginInf.SessionConnect then
      begin
        LoginInf.Free;
        Exit;
      end;
      frmLogin := TfrmLogin.Create(nil);
      frmLogin.ShowModal;
      frmLogin.Free;
      frmLogin := nil;  if not LoginInf.Logined then //登陆成功后的标志。
      begin
        LoginInf.SessionDisConn;
        LoginInf.Free;
        LoginInf := nil;
      end
      else
      begin
        Application.CreateForm(TfrmWorkgb, frmWorkgb);
        Application.Run;
      end;
    end.
     
      

  5.   

    来自:Nizvoo, 时间:2002-5-16 13:06:00, ID:1104207 | 编辑 
    看看我的代码先
    注意:没大改动的例子,要是同事看着请!!!·······~~~~
    program Workgb;uses
      Forms,
      Sysutils,
      ConstFrm in 'SOURCE\ConstPas.pas',
      LoginFrm in 'SOURCE\LoginFrm.pas' {frmLogin},
      WorkgbFrm in 'SOURCE\WorkgbFrm.pas' {frmWorkgb};{$R *.RES}begin
      Application.Initialize;
      Application.Title := 'XXXXXX编写'; //改一下,要是同事看着不好。
      LoginInf := TLoginInf.Create;
      LoginInf.WorkPath := ExtractFilePath(Application.ExeName);
      if not LoginInf.SessionConnect then
      begin
        LoginInf.Free;
        Exit;
      end;
      frmLogin := TfrmLogin.Create(nil);
      frmLogin.ShowModal;
      frmLogin.Free;
      frmLogin := nil;  if not LoginInf.Logined then //登陆成功后的标志。
      begin
        LoginInf.SessionDisConn;
        LoginInf.Free;
        LoginInf := nil;
      end
      else
      begin
        Application.CreateForm(TfrmWorkgb, frmWorkgb);
        Application.Run;
      end;
    end.
     
      

  6.   

    source里面应该改为:
    program Project1;uses
      Forms,
      Unit1 in 'Unit1.pas' {Form_Entry},
      Unit2 in 'Unit2.pas' {Form_Major},
      Unit3 in 'Unit3.pas' {Form_Lend_Book};{$R *.RES}begin
      Application.Initialize;
      //先创建主窗体
      Application.CreateForm(TForm_Major, Form_Major);
     //创建登陆屏幕
      Application.CreateForm(TForm_Entry, Form_Entry);
      if Form_Entry.showmodel=mrok then
        //如果登陆成功则显示主窗体
        Form_Major.show
      else//否则关闭主窗体
        Form_Major.close;
      Application.Run;
    end.
      

  7.   

    MDI窗体应设为主窗体,首先进入project options看一下是否是主窗体。这是很关键的一步。我不同意ihihonline(小小->充电中……)的看法,其实若我们把project options中auto create forms填入MDI窗体,Available forms填入登录窗体,编程时让主窗体(MDI)的visible:=false;oncreate事件中打开登录窗体,登录信息正确填写后让MDI.visible:=true即可,这样是最简单的解决方法之一,试试吧!
      

  8.   

    mdi 应该为autocreate form在mdi的oncreate中写登陆窗口的create
    然后showmodual
    登陆完后就free(一定要关掉,要不然mdi就出错)
    然后mdi窗口就出来了
    想回到主窗口就再次create,然后把mdi给隐藏掉
      

  9.   

    第一个createform的是主窗口
    你的mdi在第二个createform里
    当然会出错
      

  10.   

    对 ihihonline(小小->充电中……) 表示赞同,
    用: Form_Enty := TForm_Enty.Create(Nil); // 会更好,但要自己释放对象。