如何在delphi中创建MDI表单

时间:2012-06-23 12:30:07

标签: delphi delphi-7

如何解决此问题“无法创建表单。目前没有MDI表单处于活动状态”。我想创建一个简单的程序,它需要一个登录表单才能访问主表单。我有三种形式:主表单(MDI表单),表单2(MDIChild)和登录表单(正常)。登录表单首先出现在主表单上,然后当我尝试从主表单调用表单2时,错误将显示“无法创建表单。当前没有MDI表单处于活动状态”。 我在Windows XP上使用Delphi 7。我是初学者。先生非常感谢您。

1 个答案:

答案 0 :(得分:4)

听起来你正在让你的LoginForm自动创建,并且它首先被创建。这不起作用,因为Application.CreateForm在项目文件中创建的第一个表单变为Application.MainForm。通过成为MDI应用程序,MainForm必须是MDI父窗口。

解决方案通常是不自动创建您的登录表单,而是自己创建。为此,您需要从IDE的主菜单中编辑.dpr文件(Project->View Source)。

您的项目源现在应该看起来像这样(显然,在Application.CreateForm调用中使用您的类):

begin
  Application.Initialize;
  Application.CreateForm(TLoginForm, LoginForm);
  Application.CreateForm(TMainForm, MainForm);
  Application.CreateForm(TChildForm, ChildForm);
  Application.Run;
end.

您需要对其进行修改,以便不首先创建LoginForm

var
  LoginOK: Boolean = False;

begin
  LoginForm := TLoginForm.Create(nil);
  try
    // Show login form. When it closes, see if login worked.
    LoginForm.ShowModal;
    LoginOK := LoginForm.CanLogin; // However you know login is OK or not here
  finally
    LoginForm.Free;
  end;
  if not LoginOK then
    Halt;    // Login failed - terminate application.
  Application.Initialize;
  Application.CreateForm(TMainForm, MainForm);
  {
     I normally do not auto-create anything but the main form
     and maybe a datamodule (which you **can** autocreate first -
     it is not a form), but a MDI application is pretty useless
     without at least one open child window, IMO.
  }
  Application.CreateForm(TChildForm, ChildForm);
  Application.Run;
end.