我还没有真正看到任何关于在 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->forms
或view-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 调用是否安全” - 是的。但是,如果您真的需要它们由应用程序自动创建,请三思。