使用新表单禁用Application.CreateForm

Tri*_*ber 3 delphi delphi-10.2-tokyo

我有一个在应用程序启动之前检查设置和权限的函数,如果一切都通过,它会选择要运行的版本并相应地更改主窗体.

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

Project.dpr

Application.Initialize;
if SomeControlFunction then
  Application.Run;
Run Code Online (Sandbox Code Playgroud)

不幸的是,每次我在项目中创建一个新表单时,它都会自动添加Project.dpr,我每次都要删除它.有没有办法禁用此行为或整个过程是错误的,我应该以不同的方式运行应用程序?

Application.Initialize;
if SomeControlFunction then
  Application.CreateForm(TUNewForm, UNewForm);
Application.Run;
Run Code Online (Sandbox Code Playgroud)

nil*_*nil 9

有一种方法可以阻止IDE以这种方式更改dpr文件.

看来,德尔福IDE会明确地寻找其中的全局变量的地方ApplicationVcl.Forms在DPR文件使用,并相应地增加了CreateForm通话.

如果你使用'alias'变量 - 比方说App- IDE将不会干扰.用以下内容替换dpr文件中的现有代码:

var
  App: TApplication;
begin
  App := Application;
  App.Initialize;
  if SomeControlFunction then
    App.Run;
end.
Run Code Online (Sandbox Code Playgroud)

添加新表单现在不会自动CreateForm在dpr文件中添加调用.


Dav*_*nan 6

有什么办法可以禁用这种行为吗?

在选项对话框中,选择Form Designer节点,然后取消选中Auto create forms & data modules选项。

此选项的文档说明:

切换是否自动创建表单。取消选中时,在第一个表单之后添加到项目的表单将放入可用表单列表而不是自动创建列表。您可以通过选择“项目”>“选项”>“表单”来更改每个表单的列出位置。

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


顺便说一下,SomeControlFunction不设置返回值。

  • 的确。也许您应该提交错误报告。 (3认同)