使用新表单禁用 Application.CreateForm

Disable Application.CreateForm with new form

我有一个功能可以在应用程序启动前检查设置和权限,如果一切正常,它会选择 运行 的版本并相应地更改主窗体。

function SomeControlFunction: Boolean;
var
  lMainForm : TForm;
begin
  if SomePermission then
    Application.CreateForm(TUForm1, lMainForm)
  else
    Application.CreateForm(TUForm2, lMainForm);
end;

Project.dpr

Application.Initialize;
if SomeControlFunction then
  Application.Run;

不幸的是,每次我在项目中创建一个新表格时,它都会自动添加到Project.dpr,我每次都必须删除它。有什么方法可以禁用此行为,或者整个过程是否错误,我应该 运行 应用程序不同?

Application.Initialize;
if SomeControlFunction then
  Application.CreateForm(TUNewForm, UNewForm);
Application.Run;

Is there any way to disable this behavior?

在选项对话框中,select Form Designer 节点,并取消选中 自动创建表单和数据模块 选项。

此选项的文档指出:

Toggles whether or not to automatically create forms. When unchecked, forms added to the project after the first one are put into the Available Forms list rather than the Auto Create list. You can change where each form is listed by choosing Project > Options > Forms.

文档没有告诉您的是,当您向尚未包含至少一个 auto-create 表单的项目添加新表单时,此选项将被忽略。所以它可能不会对你很有用。


顺便说一下,SomeControlFunction 没有设置 return 值。

有一种解决方法可以防止 IDE 以这种方式更改 dpr-file。

似乎 Delphi IDE 会明确地寻找在 dpr-file 中使用 Vcl.Forms 中的全局变量 Application 的地方,因此添加 CreateForm 个调用。

dpr-file 中的标准模板代码如下所示:

  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  <-- new forms will be added here automatically
  Application.Run;

如果您使用 'alias' 变量 - 让我们说 App - 相反,IDE 不会干扰。用以下内容替换 dpr-file 中的现有代码:

var
  App: TApplication;
begin
  App := Application;
  App.Initialize;
  if SomeControlFunction then
    App.Run;
end.

现在添加新表单不会在您的 dpr-file 中自动添加 CreateForm 调用。