【发布时间】: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 属性设置为某个值?