Delphi中存储的“主窗体”名称在哪里?

哪个物理文件存储Delphi应用程序的主表单名称?

例如, MyApplication有一个MyForm格式,它通过Project选项设置为“主窗体”。 “Main Form = MyForm”信息实际存储在哪里?

在Delphi IDE中,通过菜单“ Project | Options | Forms ”指定应用程序“主窗体” Project | Options | Forms Project | Options | Forms

明显的文件将是.bdsproj或.dpr,但似乎没有任何内容表明哪种格式是“主要”文件。


它在项目(.DPR)文件中。 以表单作为参数的第一次调用Application.CreateForm()可以识别应用程序的主窗体。

请注意,TDataModule不符合上述要求; 这实际上很有用,因为您可以在主表单之前自动创建一个datamodule,然后在主窗体的构造函数中访问该datamodule。


只是为了补充Ken White的答案。

如果您查看CreateForm的源代码:

procedure TApplication.CreateForm(InstanceClass: TComponentClass; var Reference);
var
  Instance: TComponent;
begin
  Instance := TComponent(InstanceClass.NewInstance);
  TComponent(Reference) := Instance;
  try
    Instance.Create(Self);
  except
    TComponent(Reference) := nil;
    raise;
  end;
  if (FMainForm = nil) and (Instance is TForm) then
  begin
    TForm(Instance).HandleNeeded;
    FMainForm := TForm(Instance);
  end;
end;

您会看到该函数(尽管它的名称)可用于创建其他组件。 但只有作为TForm的第一个组件才能成功创建,这可能是主要的形式。

然后对全局变量进行咆哮。

是的全局变量通常是错误的,但是对于应用程序对象和mainform对象,您可以创建一个异常。 尽管你可以忽略mainform的全局,但你需要自己编辑dpr文件:

更改:

begin
  Application.Initialize;
  Application.CreateForm(TMyMainForm, MyMainFormGlobal);
  Application.Run
end.

至:

procedure CreateMain;
var
  mainform : TMyMainForm;
begin
  Application.CreateForm(TMyMainForm, mainform);
end;

begin
  Application.Initialize;
  CreateMain;
  Application.Run
end.

你失去了所有的全球形式。

链接地址: http://www.djcxy.com/p/59655.html

上一篇: Where is the "Main form" name stored in Delphi?

下一篇: How to compile and run this Delphi code without installing an IDE?