我有一个D2006应用程序,其中的DPR文件已进行了许多编辑(是的,我知道-您不应该将DPR文件弄乱)以适应启动画面之类的事情,从而防止该应用程序的第二个实例启动,处理创建任何表单之前需要处理的命令行选项的集合,等等。

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

如果我尝试还原所有应该从对话框中自动创建的表格,它会显示Error - Call to Application->CreateForm is missing or incorrect并且不执行任何操作。


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

最佳答案

关于DPR文件中可以执行的操作,我还没有真正看到任何书面规则,因为我猜没有严格的规则。

当您创建一个“窗体”应用程序时,问题开始。 (我注意到控制台或非GUI应用程序都没有问题)。
每当您向其添加新的Form或DataModule时,IDE都会自动更改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配置为不自动创建表单(不会在DPR中创建Application.CreateForm条目)。在较早版本的Delphi中,此选项位于:Tools/Environment Options/Preferences -> Auto create forms下。在较新的版本中:Tools/Options/VCL Designer/Module creation options -> Auto create forms & data modules

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

在过去的几年中,此方法对我一直很好,可以维护大型DB应用程序。这可能不会涵盖所有情况,但可以满足我的需求。



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

关于forms - 如何恢复自动创建表单列表和DPR初始化代码之间的同步?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15773289/

10-09 00:02