3

我有一个 D2006 应用程序,其中 DPR 文件进行了多次编辑(是的,我知道 - 你不应该弄乱 DPR 文件)以适应诸如启动屏幕之类的东西,防止启动应用程序的第二个实例,处理在创建任何表单之前需要处理的命令行选项等。

有一天,我注意到项目选项中的自动创建表单列表是空的——但 DPR 文件中仍然有创建某些表单的代码。

如果我尝试恢复应从对话框自动创建的所有表单,它会抱怨Error - Call to Application->CreateForm is missing or incorrect并且不执行任何操作。

  • 除了从头开始重建 DPR 之外,如何恢复此连接?
  • 手动添加CreateForm调用是否安全?
  • 是否有关于您可以在 DPR 文件中执行的操作的任何记录规则?
  • 我怀疑 DPR 中的 try..except 和 if..else 子句让 Delphi 感到不安。将尽可能多的功能转移到一个单独的单元并调用它们会有帮助吗?
4

3 回答 3

4

我还没有真正看到任何关于在 DPR 文件中可以做什么的记录规则,因为我想没有严格的规则。

当您创建“表单”应用程序时,问题就开始了。(我注意到控制台或非 GUI 应用程序没有问题)。
IDE 将在您向其添加新表单或 DataModule 时自动更改 DPR,假设您要自动创建它们。

如果它有很多代码/编译器指令/if-blocks/try-catch 块等,这可能会弄乱你的 DPR...

所以我会告诉你我的规则是什么,并且简短地说: 尽可能简单。

我的 DPR 仅包含对某些初始化代码的调用,并且仅自动创建主窗体:

MyAppInit; // in AppInit unit
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.Run;

但是,在使用部分中,我添加(或保留 IDE 添加的内容)我的应用程序使用的所有表单(以及与应用程序相关的单元)——这在我想要view->formsview-units.
事实上,当我向应用程序添加一个新表单时,我做的第一件事就是去 DPR 并删除该行:

Application.CreateForm(TMyNewForm, MyNewForm);

注意(编辑):IDE 可以配置为不自动创建表单(不会Application.CreateForm在 DPR 中创建条目)。在旧版本的 Delphi 中,此选项位于:Tools/Environment Options/Preferences -> Auto create forms. 在较新的版本中:Tools/Options/VCL Designer/Module creation options -> Auto create forms & data modules.

在运行时,我会在需要时动态创建所有表单,并在不再需要时销毁它们。DataModules/Splash (etc...) 在 MainForm.OnCreate 事件上创建。

在过去的几年里,这种方法对我很有效,维护了一个大规模的数据库应用程序。这可能不会涵盖所有情况,但它可以满足我的需求。


PS:“手动添加 CreateForm 调用是否安全” - 是的。但是,如果您真的需要它们由应用程序自动创建,请三思。

于 2013-04-02T22:05:00.977 回答
1

由于 Delphi 拥有 .DPR,因此我将启动逻辑放入每个项目的单独单元中

这非常有效,.DPR 中只需要很少的条目。

由于该单元Application.CreateForm也控制逻辑,因此 IDE 有一个空列表:我很好。

.DPR 中剩下的唯一内容是:

  • uses指示哪些模块是您的项目的一部分的大
  • Main在启动逻辑单元中调用
于 2013-04-03T09:37:58.130 回答
1

恕我直言,您实际上并不需要 Delphi 的 AutoCreate 表单,但可能在临时测试项目中。

而 dpr 只是另一个源代码文件,您应该在其中编写代码以使事情发生(或阻止它发生),所以如果您丢失了 sincronization,请不要担心,恕我直言,如果无法阅读,这是错误的你的帕斯卡代码正常工作。

如果您仍想从 DPR 创建一些表单,请将 Application.CreateForm 或 TMyForm.Create 调用手动添加到文件中,AFAIK 没有禁止这样做的规则。

于 2013-04-02T20:12:15.887 回答