小弟进来在开发一个系统时要用到MDI,我把主窗体设为famdiform,子窗体设为fachildform,然后在主窗体中调用Open()来打开子窗体,可是为什么显示Cannot Create Form. No MDI forms are currently active我知道这个问题不是太复杂,可是我已经糊涂了!请大家帮帮我啊!不胜感激!
open()函数如下:
var
  i: integer;
  Child:TForm;
begin
  for i := 0 to Screen.FormCount -1 do
      if Screen.Forms[i].ClassType=FormClass then
      begin
        {检查窗体是否已经打开,如果没有打开,打开它,
        如果已经打开,让它正常显示即可}
        Child:=Screen.Forms[i];
        if Child.WindowState=wsMinimized then
           ShowWindow(Child.handle,SW_SHOWNORMAL)
        else
           ShowWindow(Child.handle,SW_SHOWNA);
        if (not Child.Visible) then Child.Visible:=True;
        Child.BringToFront;
        Child.Setfocus;
        TForm(fm):=Child;
        exit;
      end;
  Child:=TForm(FormClass.NewInstance);
  TForm(fm):=Child;
  Child.Create(AOwner);
end;
调用语句如下:OpenForm(T子窗体,子窗体,self);
子窗体与主窗体都没有在Option中自动创建!

解决方案 »

  1.   

    var
    ProductChild:TFrmProduct;//这是MDI子窗体
    i:integer;
    begin
       Perform(WM_SETREDRAW,0,0);
       if Application.FindComponent('FrmProduct')=nil then
       begin
        ProductChild:=TFrmProduct.Create(Application);
        ProductChild.Show;
       end
       else
       for  i:=0 to self.MDIChildCount-1 do
       begin
       if self.MDIChildren[i] is TFrmProduct then
        ShowWindow(MainForm.MDIChildren[i].Handle, SW_MAXIMIZE);
       end;
       Perform(WM_SETREDRAW,  1,  0);
       RedrawWindow(Handle,nil,0,RDW_FRAME+RDW_INVALIDATE+RDW_ALLCHILDREN+RDW_NOINTERNALPAINT);
    end;
      

  2.   

    已经很具体啦
    把这段代码拷贝下来试试,放Button1Click下面也行啊
      

  3.   

    问题已经解决
    Auto-Create中启动登录窗体和主窗体(又称父窗体)
    而在mainForm.show()中加入
    if loginForm.ShowMoadl=mrOK then
      begin
        LoginForm.Free;
        MainForm.Show;
      end
      else
      begin
        Application.ShowMainForm := False;
        Application.Terminate;
      end;
    而在loginForm中button1中加入ModalResult := mrOK;