郁闷啊,但是我又不得不这样做,遇到“cannot create form.no mdi forms are currently active”这个错误

解决方案 »

  1.   

    在网上找了一个方法设置如下procedure Tfrm_Monitor.RztBtn_digitalClick(Sender: TObject);
    var
      i:Integer ;
      pHandle:^THandle ;
    begin
      pHandle :[email protected]; //进行ClientHandle的转移
      pHandle^:=Self.ClientHandle ;
      for i:=0 to Self.MDIChildCount -1 do
      begin
        if (Self.MDIChildren[i] is Tfrm_digital) then
        begin
           Self.MDIChildren[i].BringToFront ;
           Self.MDIChildren[i].SetFocus ;
           Exit ;
        end;
      end;
      Application.CreateForm(Tfrm_digital,frm_digital);
      frm_digital.Show ;
    end;
    按照上述方法转移ClientHandle转移后,发现可以非主窗体也可以显示子MDI了,但是,关闭了MDI父窗体的时候,发现原来的主窗体显示不正常了,如下图所示:变成灰色了,鼠标放在按钮上有延时变化,但是点击确没反应,然后在MDI父窗体关闭的时候,添加了如下代码发现还是没用procedure Tfrm_Monitor.FormClose(Sender: TObject;
      var Action: TCloseAction);
    var
      pHandle:^THandle ;
    begin
       pHandle :[email protected];
      pHandle^:=frm_Main.ClientHandle;
      ShowMessage(Application.MainForm.Name);//显示是原来主窗体的名字
    end;求解怎么解决这个问题
      

  2.   

    我的主窗体为A,然后调用子窗体为B,B为MDI父窗体,B下面有两个MDI 子窗体C和D ,然后当点击B页面上的显示C或者D页面按钮时候,就报“cannot create form.no mdi forms are currently active”这个错误,然后就想了如上所述的方法,
      

  3.   

    自己在窗体上画假的MDI子窗体。
      

  4.   

    估计楼主A窗体时登陆窗体是吧?如果是这样那么你的MDI父窗体就弄错了。当然会有问题。
    B应该为主窗体。登陆窗体可以用子窗体弄。在工程文件里面弄下。先显示登陆子窗体。然后再显示主窗体。
      

  5.   


     我自己内嵌了窗体,模仿MDI我知道MDI父窗体必须是主窗体,我就是想问MDI父窗体,怎么样才能让它不是主窗体,也可以使用