我的应用程序有四个窗体;
分别是login,form1,form2,form3
其中login是启动登陆窗体,其formstyle:=fsNormal,
form1.formstyle:=fsMDIForm
form2.formstyle:=fsMDIchild要求程序一启动就显示login,然后由login调用form1,然后又form1调用form2但是启动就出错,
错误提示是"cannot create form,No MDIforms are currently avtive'工程文件应该怎么写?
各窗体的有关代码应该怎么写才不出错

解决方案 »

  1.   

    这与是否MDI窗体无关。参考下面的例子:program Project1;uses
      Forms,
      Unit1 in 'Unit1.pas' {Form1},
      Unit2 in 'Unit2.pas' {Form2},
      Unit3 in 'Unit3.pas' {Form3},
      Unit4 in 'Unit4.pas' {Login};{$R *.res}begin
     Application.Initialize;
     Login := TLogin.Create(application);
     Login.ShowModal;
     Application.Title :='Test';
     Application.CreateForm(TForm1, Form1);
     Login.Hide ;
     Login.Release;
     Application.Run;
    end.-------------------------------unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Btn_ShowForm2: TButton;
        Btn_ShowForm3: TButton;
        procedure Btn_ShowForm2Click(Sender: TObject);
        procedure Btn_ShowForm3Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation
    uses Unit2, Unit3;
    {$R *.dfm}procedure TForm1.Btn_ShowForm2Click(Sender: TObject);
    begin
      if Not Assigned(Form2) then
        begin
        Form2 := TForm2.Create(self);
        end;
      Form2.Show;
    end;procedure TForm1.Btn_ShowForm3Click(Sender: TObject);
    begin
      if Not Assigned(Form3) then
        begin
        Form3 := TForm3.Create(self);
        end;
      Form3.Show;
    end;end.------------------------------unit Unit2;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;type
      TForm2 = class(TForm)
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form2: TForm2;implementation{$R *.dfm}end.-------------------------------unit Unit3;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;type
      TForm3 = class(TForm)
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form3: TForm3;implementation{$R *.dfm}end.-----------------------------------unit Unit4;//Login窗体的单元interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TLogin = class(TForm)
        BtnLogin: TButton;
        procedure BtnLoginClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Login: TLogin;implementation{$R *.dfm}procedure TLogin.BtnLoginClick(Sender: TObject);
    begin
      Login.ModalResult:=mrok;
    end;end.
      

  2.   

    这与是否MDI窗体无关。-----我收回这句话。
      

  3.   

    在form1的create事件中创建并启动login窗体就行了,我的一个程序就这样没问题
      

  4.   

    begin
      Application.Initialize;
      Application.CreateForm(TLogin, Login);//fsNormal 这里不能这么创建,必须用下面的方式创建
      Login:=TLogin.Create(Application);
      Login.Show;
      Application.CreateForm(TMain, Main);//fsMDIForm
      Application.CreateForm(TChild1, Child1);//fsMDIChild
      Application.CreateForm(TChild2, Child2);//fsMDIChild
      Application.Run;
    end.
      

  5.   

    begin
      Application.Initialize;
      //Application.CreateForm(TLogin, Login);//fsNormal 这里不能这么创建,必须用下面的方式创建
      Login:=TLogin.Create(Application);
      Login.Show;
      Application.CreateForm(TMain, Main);//fsMDIForm
      Application.CreateForm(TChild1, Child1);//fsMDIChild
      Application.CreateForm(TChild2, Child2);//fsMDIChild
      Application.Run;
    end.
      

  6.   

    Login.ShowModal;
    ~~~~~~~~~~~~~~~~~~这就是刚才你给我发站内短信问的问题的解决办法。