delphi - 使用新表单禁用 Application.CreateForm

标签 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;

项目.dpr

Application.Initialize;
if SomeControlFunction then
  Application.Run;

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

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

最佳答案

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

看来 Delphi IDE 将显式查找 dpr 文件中使用 Vcl.Forms 中的全局变量 Application 的位置,并相应地添加 CreateForm 调用。

dpr 文件中的标准模板代码如下所示:

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

如果您使用“别名”变量 - 比如说 App - 相反,IDE 不会干扰。将 dpr 文件中的现有代码替换为以下内容:

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

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

关于delphi - 使用新表单禁用 Application.CreateForm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48985532/

相关文章:

delphi - 有 `ProgressButton`吗?

delphi - 在 Windows 的 Delphi 应用程序中检测触摸功能(平板电脑)的最佳实践是什么?

delphi - TBitmap32.Assign() 异常行为

Delphi接口(interface)没有引用计数

delphi - 当 TFormatSetting 设置为 en-US 时,如何解决 '10,000.00' 不是有效的浮点值

android - Firemonkey android read_phone_state运行时权限要求获取IMEI

delphi - "Invalid address specified to RtlFreeHeap( 06450000, 08387460 )"是什么意思?

Windows 7 x64 上的 Delphi 问题?

delphi - 使用 Delphi 通过网络连接到受密码保护的共享文件夹

json - 如何在Delphi中使用TJSONIterator备份多个级别?