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

时间:2009-03-06 01:59:55

标签: delphi

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

e.g。 MyApplication的格式为MyForm,通过“项目”选项设置为“主窗体”。实际存储的信息“Main Form = MyForm”在哪里?

在Delphi IDE中,应用程序“Main form”通过菜单指定:Project | Options | Forms

显而易见的文件是.bdsproj或.dpr,但这些文件中似乎没有任何内容表明哪个表单是“主”表单。

2 个答案:

答案 0 :(得分:15)

它位于项目(.DPR)文件中。使用表单作为参数对Application.CreateForm()的第一次调用标识应用程序的主窗体。

请注意,TDataModule不满足上述要求;这实际上很有用,因为你可以在主窗体之前自动创建一个数据模块,然后在主窗体的构造函数中访问该数据模块。

答案 1 :(得分:0)

只是为了补充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.

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