我有一个工程,主窗体用的是MDI。在这基础上我又做了一个用户登录窗体,用的是SDI窗体。我想让用户登录成功之后,直接进入MDI这个窗体。现在的问题是能进入,但一运行MDI窗体中各子模块时,就提示“没有活动MDI窗体之类“的错误!
怎样才能实现我上述所说的功能呢?
另:当SDI窗体运行时,怎样让用户不能更改窗体的大小呢?
谢谢!

解决方案 »

  1.   

    1、应该让MDI父窗体做MAINFORM,也就是说它要第一个创建。
    2、设置窗体的BorderStyle为bsDialog。
      

  2.   

    做登录窗体请参考以下代码(project->view source 里的代码):
    begin
      Application.Initialize;
      with TSplashFrm.Create(Application) do
      try
        MakeSplash;
        Application.Title := 'XX管理系统';
        Application.CreateForm(TMainFrm, MainFrm); //主窗体,也就是你的MDI父窗体
      Application.CreateForm(TNormalFrm, NormalFrm);
      Close;
      finally
        Free;
      end;  with TLoginFrm.Create(Application) do //然后创建登录窗体
      try
        ShowModal;
      finally
        Free;
        if ModalResult = mrOK then
          Application.Run
        else
          Application.Terminate;
      end;
    end.
      

  3.   

    做登录窗体请参考以下代码(project->view source 里的代码):
    begin
      Application.Initialize;
      with TSplashFrm.Create(Application) do
      try
        MakeSplash;
        Application.Title := 'XX管理系统';
        Application.CreateForm(TMainFrm, MainFrm); //主窗体,也就是你的MDI父窗体
      Application.CreateForm(TNormalFrm, NormalFrm);
      Close;
      finally
        Free;
      end;  with TLoginFrm.Create(Application) do //然后创建登录窗体
      try
        ShowModal;
      finally
        Free;
        if ModalResult = mrOK then
          Application.Run
        else
          Application.Terminate;
      end;
    end.
      

  4.   

    to Snakeguo:
    if ModalResult = mrOK then
    出现以下错误:
    [Error] WHJXC.DPR(50): Undeclared identifier: 'mrOK'
      

  5.   

    mbOK也不行呀!大家快帮帮我吧!谢谢你们了!
      

  6.   

    uses
      Controls,
      Forms,
      

  7.   

    with TFrmPwd.Create(self) do
      begin
        ShowModal;
        if ModalResult = mrOK  then 
           Application.Run;
        
      end;
      

  8.   

    to Snakeguo(楠):
    请问你uses
      Controls,
      Forms,是在哪里加上去的,我在主工程里加的,怎么不行啊!再帮帮我吧!
      

  9.   

    创建一个MDI应用,然后新建一个登入窗体,在MDI的Uses语句中加入 unit1
    然后再MDI OnShow事件里面添加代码 form1.showmodal;就可以实现了
      

  10.   

    对,就是在项目文件里加的program xx;uses
      Controls,
      Forms,
      Main in 'Frm\Main.pas' {MainFrm},
      Splash in 'Frm\Splash.pas' {SplashFrm},
      Login in '..\Share\Units\Login.pas' {LoginFrm};{$R *.res}begin
      Application.Initialize;
      with TSplashFrm.Create(Application) do
      try
        MakeSplash;
        Application.Title := 'XX管理系统';
        Application.CreateForm(TMainFrm, MainFrm);
      Close;
      finally
        Free;
      end;  with TLoginFrm.Create(Application) do
      try
        ShowModal;
      finally
        Free;
        if ModalResult = mrOK then
          Application.Run
        else
          Application.Terminate;
      end;
    end.
      

  11.   

    to Snakeguo(楠):
    请问你的这个语句是用来做什么的:
    Splash in 'Frm\Splash.pas' {SplashFrm},
    再帮助我解答一下吧!
      

  12.   

    》》Splash in 'Frm\Splash.pas' {SplashFrm},
    这句相当于变量声明,即SplashFrm在哪个单元里。D自动给你加上的。
      

  13.   

    to Snakeguo(楠):以下是我工程里的源代码:
    program whjxc;uses
      Controls,
      Forms,
      Main in 'Main.pas' {frmMain},
      dm in 'DM.PAS' {whdata: TDataModule},
      cgcx in 'cgcx.pas' {frm_cgcx},
      childwin in 'CHILDWIN.PAS' {mdichild},
      ckcx in 'ckcx.pas' {frm_ckcx},
      wh_spbm1 in 'wh_spbm1.pas' {spbm1},
      pdcx in 'pdcx.pas' {frm_pdcx},
      kctj in 'kctj.pas' {wh_cktj},
      kccx in 'kccx.pas' {frm_kccx},
      wh_spbm2 in 'wh_spbm2.pas' {spbm2},
      wh_spbm in 'wh_spbm.pas' {spbm},
      cgrk in 'cgrk.pas' {wh_cgrk},
      kmcx in 'kmcx.pas' {frm_kmcx},
      zybm in 'zybm.pas' {frm_zybm},
      kfbm in 'kfbm.pas' {frm_kfbm},
      whspbm in 'whspbm.pas' {wh_jbspbm},
      khgysbm in 'khgysbm.pas' {wh_khgysbm},
      xsck in 'XSCK.PAS' {wh_xsck},
      kcpd in 'KCPD.PAS' {wh_kcpd},
      login in 'login.pas' {frm_login},
      fregister in 'fregister.pas' {Form1},
      register in 'register.pas' {AboutBox},
      pdqb in 'pdqb.pas' {frm_pdqb},
      logon in 'logon.pas' {wh_logon};{$R *.res}begin
      Application.Initialize;
      Application.Title := '五环进销存';
      Application.CreateForm(Twhdata, whdata);
      Application.CreateForm(Twh_logon, wh_logon);
      Application.CreateForm(TfrmMain, frmMain);
      if NoRegistry then
       begin
      Application.CreateForm(TForm1, Form1);
      Application.CreateForm(TAboutBox, AboutBox);
       end
       else
      Application.CreateForm(TfrmMain, frmMain);
        with Twh_logon.Create(Application) do //然后创建登录窗体
      try
       ShowModal;
      finally
        Free;
        if ModalResult = mrOK then
          Application.Run
        else
          Application.Terminate;
      end;
       //Application.Run;
    end.
      

  14.   

    不知道有没有理解错,你试试这样吧:begin
      Application.Initialize;
      Application.Title := '五环进销存';
      Application.CreateForm(TfrmMain, frmMain); //这个应该是主窗体吧,要
    第一个被创建!
      Application.CreateForm(TForm1, Form1);
      Application.CreateForm(TAboutBox, AboutBox);
    //  Application.CreateForm(TfrmMain, frmMain); //这里就不用了  with Twh_logon.Create(Application) do //然后创建登录窗体
      try
       ShowModal;
      finally
        Free;
        if ModalResult = mrOK then
        begin    
          if NoRegistry then
          begin
            Form1.Show;  //在Form1中的操作成功后,就Application.Run 
          end
          else
            Application.Run
        else
          Application.Terminate;
      end;
       //Application.Run;
    end.
      

  15.   

    在登入窗口放2个按钮,一个Ok ,一个Cancle
    cancle 里面写 mainform1.close;关闭主窗口。那个登入窗口也就关闭了
    ok里面写 form1.close 关闭这个登入窗口,那个主窗口就出来了