哪个物理文件存储Delphi应用程序的主要表单名称?
e.g。 MyApplication
的格式为MyForm
,通过“项目”选项设置为“主窗体”。实际存储的信息“Main Form = MyForm”在哪里?
在Delphi IDE中,应用程序“Main form”通过菜单指定:Project | Options | Forms
。
显而易见的文件是.bdsproj或.dpr,但这些文件中似乎没有任何内容表明哪个表单是“主”表单。
答案 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.
你失去了所有的全球形式。