delphi - delphi如何创建MDI窗体

标签 delphi delphi-7

如何解决“无法创建表单。当前没有事件的 MDI 表单”这个问题。我想制作一个简单的程序,需要一个登录表单才能访问主表单。我得到了三个表单:主表单(MDI 表单)、Form2(MDIChild)和登录表单(普通)。登录表单将首先出现,然后是主表单,然后当我尝试从主表单调用表单 2 时,会显示错误“无法创建表单。当前没有事件的 MDI 表单”。 我在 Windows XP 上使用 Delphi 7。我是初学者。先生非常感谢您。

最佳答案

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

解决方案通常是不自动创建登录表单,而是自己创建。为此,您需要编辑 .dpr 文件(从 IDE 主菜单中选择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.

关于delphi - delphi如何创建MDI窗体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11169511/

相关文章:

delphi - E2001 需要序号类型

file - 分配文件() : File access denied

delphi - 在delphi中为分支声明 block 级变量

delphi - 如何在不禁用 UAC 的情况下在 Windows 7 上运行 Delphi 7?

delphi - 使控件透明

web-services - 德尔福7的WSDL导入问题

delphi - 如何使用 Delphi 7 进行命令行构建?

使用 basicHttpBinding 的 Delphi 7 Soap WCF 服务

Delphi RTTI 动态转换

xml - 使用TXMLTransformProvider时控制XML节点的顺序