gpt4 book ai didi

forms - 如何恢复自动创建表单列表和 DPR 初始化代码之间的同步?

转载 作者:行者123 更新时间:2023-12-03 15:48:29 24 4
gpt4 key购买 nike

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

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

如果我尝试恢复应从对话框自动创建的所有表单,它会提示错误 - 对应用程序->CreateForm 的调用丢失或不正确并且不执行任何操作。

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

最佳答案

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

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

如果 DPR 有大量代码/编译器指令/if-blocks/try-catch block 等,这可能会弄乱您的 DPR...

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

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

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

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

Application.CreateForm(TMyNewForm, MyNewForm);

注意(编辑):IDE 可以配置为不自动创建表单(不会在 DPR 中创建 Application.CreateForm 条目)。在旧版本的 Delphi 中,此选项位于:工具/环​​境选项/首选项 -> 自动创建表单。在较新版本中:工具/选项/VCL 设计器/模块创建选项 -> 自动创建表单和数据模块

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

在过去几年维护大型数据库应用程序时,这种方法对我来说非常有效。这可能无法涵盖所有情况,但它可以很好地满足我的需求。

<小时/>

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com