【问题标题】:Is there a way to load a form programatically from the dfm有没有办法从 dfm 以编程方式加载表单
【发布时间】:2016-02-26 04:01:53
【问题描述】:

我正在处理多个目录中包含 500 多个表单的遗留代码。我需要找到未设置 Tag 属性的任何 TDataset 后代。

如果我正在寻找设置为特定值的标记,它将在 dfm 中,我可以搜索它。在这种情况下,dfm 中将缺少 Tag 属性。

到目前为止,我最好的建议是编写另一个程序,一次加载所有表单。在加载的事件中,它可以检查组件和属性。手动将它们全部添加到项目中,修复使用子句并按其类型创建每个子句,工作量太大。即使我要这样做,也无法确保我没有错过任何表格。此外,有些表单与其他表单具有相同的名称(它们位于不同的文件夹中并且相互排斥)。

问题

我想扫描 dfm 文件的文件夹并仅从 dfm 文件加载表单。这甚至是明智的还是可能的?如果是这样,那么我如何以编程方式仅从 dfm 加载/创建表单?

【问题讨论】:

  • 为什么需要创建表单。只需解析 dfm 文件。这就是脚本语言派上用场的地方。
  • 大卫,我在考虑正则表达式并放弃了它。我没想过脚本。仍然存在一些问题。 1) TDataset 有很多子类。我必须找到他们所有的名字,这很容易出错。 2) dfm 有嵌套对象,我只需要在 TDataset 后代中查找缺少的 Tag 属性。所以,是的,理论上这是可能的。如果一切都失败了,我可能不得不这样做。
  • 是否将应用中的所有表单添加到自动创建列表中,然后通过Application.Components枚举它们?
  • 我认为大卫赫弗南是正确的。使用 TClassFinder 类(在 Classes.pas 中声明),您可以在应用程序中找到所有已注册的类,即在一个简单的循环中,您可以获得应用程序已知的所有 TDataSet 后代的列表。使用该列表解析所有 DFM 文件并获取它们的标记值相对简单。
  • 我很好奇为什么您需要每个 TDataset 后代将其 Tag 属性设置为某个值?

标签: forms delphi


【解决方案1】:

我想扫描文件夹中的 dfm 文件并仅从 dfm 文件加载表单。这是明智的还是可能的?

不,这是不可能的。如果没有定义表单的类,您将无法创建表单的实例。一个 dfm 文件是不够的。

【讨论】:

  • 我找到了这篇文章。虽然它并不完全符合我的要求。它让我想到我可以解析 dfm 并将组件加载到空表单上。我只需要创建根组件,我可以丢弃面板和按钮等。stackoverflow.com/questions/19989389/…
猜你喜欢
  • 1970-01-01
  • 2017-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-07
  • 2013-04-02
  • 2021-08-28
相关资源
最近更新 更多