【问题标题】:In Delphi is there a way to see all references and links to a component?在 Delphi 中有没有办法查看组件的所有引用和链接?
【发布时间】:2011-12-20 17:33:19
【问题描述】:

我正在重构一个大型项目,并且需要将一些组件移动到新的模块和表单中。是否有一种健全的方法来确保更新依赖组件的属性?

也许 grep 项目的 dfms?

示例:将 TDataSource 从一个巨大的 DataModule 移动到一个较小的 DataModule。在某些情况下,来源可能是 40-50 表格的引用。我需要确保所有引用数据源的控件都得到更新。

【问题讨论】:

  • 我会 grep dfm 文件,然后我会使用基于 perl 正则表达式的脚本进行必要的修改
  • 更高版本的 Delphi 允许您从编辑器中重构和重命名。你试过那个功能吗?此外,最好将其从原始位置完全删除或重命名,以便您的编译器捕捉您错过的内容。
  • @marcus 重命名重构永远不会适用于现实世界的项目。如果它处理 dfm 文件引用,我会感到震惊。
  • "Icarus" 仅用于分析uses 子句——完整的工具名为"Pascal Analyzer"。我不确定在这种情况下会有所帮助。
  • @Bruce 也许它不喜欢我的代码。但它适用于非常本地的更改,并且从不管理跨越 2 或 3 个文件的重命名。它从来没有做错任何事,只是找不到所有的参考资料。如果使用的是 real 编译器而不是假编译器之一,那么我相信一切都会好起来的。

标签: delphi


【解决方案1】:

GEXperts 中的 GREP 允许搜索 pas 和 dfm 文件。

【讨论】:

  • 这是实现我想要的最快的方式。
  • 如果 ModelMaker CodeExplorer 在这方面也有一些非常强大的功能,我不会感到惊讶。
【解决方案2】:

首先,我当然希望您使用版本控制。

我意识到这是一个“如此明显”的答案,但我发现查看组件的所有引用和链接的最佳方法是(使用版本控制,以便我以后可以恢复所有更改),重命名属性或组件,然后看看有什么中断。

Pascal Analyzer 在这里帮不上什么忙。

Delphi 的重构功能可能会有所帮助(尝试重命名重构,看看它可以建议多少地方会自动为您重命名)。不要应用更改,只需查看建议即可。

至于“移动而不是重命名”某些控件或资源,请询问“为什么”这样做。为什么要移动数据源?数据源只是数据感知控件的着陆点,您可以有多个数据源指向单个数据集。为什么不只移动数据集,而将数据源留在原处?

【讨论】:

  • MEGADATAMODULE 中包含的数据源现在正在被拆分,并且源放在需要它们的表单上。
  • 在 Pascal Analyzer 中,“Brief Cross-reference”显示了所有标识符的使用位置。
  • @Bruce,我无法让 Pascal Analyzer 在 DFM 文件中找到引用。如果它适合你,你的设置是什么?
  • +1 用于版本控制。如果出现问题,您可以随时恢复到稳定版本。在处理 TDataSource 和数据件组件时,它将为您节省数小时的头痛。
  • @Warren,在 Pascal Analyzer 中很容易错过这样的事情。我记得看到它,但不得不去寻找。
【解决方案3】:

如果您使用的是 XE 或更高版本,您可以在代码编辑器中右键单击组件名称或其他标识符,然后选择 Search for Usages 以获取要更新的引用列表。

更新: 不幸的是,这仅适用于源代码引用,并且不显示标识符在 DFM 中的使用位置。

【讨论】:

  • 我没有在 dfm 级别看到这项工作。我需要通过重命名或移动它的查找表来找到我刚刚杀死的下拉列表。根据我的经验,这些实例无法通过语法检查找到,搜索用法也不会进入 dfms。
  • 它是否在 DFM 文件中找到了用途?我在一个数据模块中尝试了一个 TImageList,它连接到两个不同框架中的菜单和工具栏 - 没有找到任何框架。
  • @Uwe,很遗憾,没有。与 Pascal Analyzer 一样,它仅适用于源代码引用。
【解决方案4】:

在 Delphi 或 Notepad++ 中,为 MEGADATAMODULE 执行 Find In Files,并确保包含整个源分支。那应该找到所有实例。您还可以使用 Notepad++ 搜索所有 .dcp、.bpl、.dll 和 .exe 二进制文件,以查看可能需要重新构建的内容。

【讨论】:

  • AFAIK,Delphi 中的“在文件中查找”在 DFM 文件中找不到引用。
  • 如果不是“在项目组中的所有文件中搜索”,而是使用“在目录中搜索”,并使用正确的文件掩码,则可以。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-02
  • 1970-01-01
  • 1970-01-01
  • 2021-01-12
  • 1970-01-01
  • 2014-08-14
  • 2019-09-06
相关资源
最近更新 更多