我在做一个数据库系统 我想用mdi窗体,但我希望通过一个登陆窗体(login)验证身份后调用mdi窗体,我就在mdi窗体的oncreate中动态创建了login窗体,我在在mdi窗体中创建MDIchild子窗体时就报
‘cannot create form.no mdi forms are currently active’我设的就只有mdi窗体是系统创建(Auto_create forms)的 ,其他全是Available form的

解决方案 »

  1.   

    补充:~~~~~~~~怎么解决MDI窗体调用MDICHILD窗体时,没有active mdiform的问题 
       当我通过验证登陆成功后,显示MDI窗体,可是在MDI 中调用MIDCHILD FORM 是出错
    提示为 没有active mdiform的问题。
    请问谁知道怎么解决,谢谢!! 
      

  2.   

    放在onshow里,那主窗体就不就出来了我就要通过登陆窗体(login)验证身份后调用mdi窗体啊~~~
      

  3.   

    我给你一段代码,你照做就行了。program tt;uses
      Forms,
      Windows,
      Classes,
      Sysutils,
      Controls,
      Main in 'Main.pas' {frmMain},
      Login in 'Login.pas' {frmLogin};{$R *.res}
    var i:integer;
    begin  Application.Initialize;
      frmLogin:=TfrmLogin.create(Application);
      if frmLogin.showmodal=mrOK then  {先出现登陆窗口,}
      begin
        frmLogin.Free;
        Application.CreateForm(TfrmMain, frmMain);
        Application.Run;
      end;
      

  4.   

    <<放在onshow里,那主窗体就不就出来了
    试了以后就知道了
      

  5.   

    在if frmLogin.showmodal=mrOK then 报错啊有问题啊???继续~~~
      

  6.   

    报什么错,不可能报错的,哦,好像是不能找到mrOK对吧,你只需将mrOK常量所在单元添加进uses单元就可以了。
      

  7.   

    我一下也不知道这个mrOK常量在哪个单元,你干脆将下面这几个单元全加进去,肯定会通过的。 
     Forms,
      Windows,
      Classes,
      Sysutils,
      Controls,
      

  8.   

    将frmmain的visible设为false
      Application.Initialize;
      Application.Title := ¥¥¥系统';
      Application.CreateForm(TFrmMain, FrmMain);
      Application.CreateForm(TFrmlogin, Frmlogin);
      Frmlogin.showmodal;
      Application.Run;在Frmlogin登录按钮中写
    frmmian.show就ok
      

  9.   

    1、你把登陆窗口设置成了程序的主窗口,所以才会出这种问题,有很多解决办法的,可以参考以前很多类似的帖子,2、如果一定要解决‘cannot create form.no mdi forms are currently active’的问题(针对这个错误),给你kingron的参考一下:根据VCL的源代码,发现在创建窗体的时候,系统会检测MainForm是不是nil和MainForm.ClientHandle是不是nil,对于MainForm就是MDI Form的,因为有ClientHandle,所以没有问题,但是对于非MDI的主窗体,其ClientHandle为nil,因此出现错误。知道原因之后,就好办了,因此我们只要把MainForm.ClientHandle修改称自己的MDI Form的ClientHandle即可,要做这个工作,非指针莫属了!!!
     
    在你的MDI MainForm的创建子窗体的代码中改成类似的即可。我测试通过,不过是否有什么后遗症之类,我就无法保证了。
    var
       pHandle:^THandle;
    begin
       pHandle :[email protected];
       pHandle^:=ClientHandle;
       with Tfrmchild.Create(Application) do show;
    end;
     
      

  10.   

    不用把登陆窗体设成MDI的先SHOW就可以LOGINFORM:=TLOGINFORM.create(application);
    loginform.show;