gpt4 book ai didi

delphi - delphi如何创建MDI窗体

转载 作者:行者123 更新时间:2023-12-02 02:13:35 29 4
gpt4 key购买 nike

如何解决“无法创建表单。当前没有事件的 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com