在Delphi中,是否有一种方法可以查看组件的所有引用和链接?

9

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

也许可以在项目的dfms中使用grep命令搜索?

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


2
Delphi的后续版本允许您从编辑器中进行重构和重命名。您尝试过这个功能吗?此外,最好将其完全从原始位置删除或重命名,以便编译器可以捕获您错过的内容。 - Marcus Adams
1
@marcus 重命名重构在实际项目中从未奏效。如果它能处理dfm文件的引用,我会感到惊讶。 - David Heffernan
我会尝试使用Peganza的Icarus。这是一个Pascal分析器。不能保证100%可以做到这一点,但我会尝试一下。http://www.peganza.com/products_icarus.htm - Chris Thornton
1
"Icarus"仅用于分析使用子句 - 完整工具名为"Pascal Analyzer"。我不确定它在这种情况下是否有帮助。 - Uwe Raabe
3
@Bruce 或许它不喜欢我的代码。但对于非常局部的更改,它可以正常工作,从未成功重命名超过2或3个文件。它从未做错任何事情,只是无法找到所有引用。如果使用真正的编译器而不是其中一个仿冒的编译器,我相信一切都会好起来的。 - David Heffernan
显示剩余6条评论
4个回答

6

GEXperts中的GREP功能可用于搜索pas和dfm文件。


这是我实现自己想要的目标最快捷的方式。 - Richard Holland
我不会感到惊讶,如果ModelMaker CodeExplorer在这个领域也拥有一些非常强大的功能。 - Warren P

5

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

我知道这是一个“显而易见”的答案,但我发现最好的方法是(使用版本控制,以便稍后可以撤消所有更改),重命名属性或组件,然后查看哪些内容会出错(所有引用和链接到该组件的地方)。

Pascal分析器在这里没有太大帮助。

Delphi的重构功能可能会有所帮助(尝试重命名重构,并查看它建议自动为您重命名的位置数量)。不要应用更改,只需查看建议即可。

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


现在正在拆分MEGADATAMODULE中包含的数据源,并将这些数据源放置在需要它们的表单上。 - Richard Holland
3
在Pascal分析器中,“简要交叉引用”显示所有标识符的使用位置。 - Bruce McGee
1
@Bruce,我无法让Pascal Analyzer在DFM文件中查找引用。如果你可以使用它,请问你的设置是什么? - Uwe Raabe
版本控制加1。如果出现问题,您总是可以恢复到稳定版本。当您在处理TDataSource和数据仓库组件时,它将为您节省数小时的头痛。 - Sam M
@Warren,Pascal Analyzer 中很容易错过这样的东西。我记得看到过,但不得不去找它。 - Bruce McGee
“查看哪些部分出现问题”这一部分有些棘手。要确定,您需要在运行时打开每个表单,检查项目中的每个函数。我相当确定即使对于系统化的方法,假设项目包含超过2个表单,这也是极其不切实际的。 - Tuncay Göncüoğlu

4
如果您使用XE或更高版本,可以在代码编辑器中右键单击组件名称或其他标识符,然后选择搜索用法以获取更新的引用列表。
更新: 不幸的是,这仅适用于源代码引用,并且不显示标识符在DFM中的使用位置。

我在 dfm 级别上没有看到这个工作。我需要找到刚刚通过重命名或移动其查找表而删除的下拉列表。根据我的经验,这些实例无法通过语法检查找到,也不能通过搜索用法进入 dfms。 - Richard Holland
4
它在DFM文件中有用吗?我在数据模块中尝试了一个TImageList,并将其连接到两个不同帧中的菜单和工具栏 - 没有找到任何帧。 - Uwe Raabe
@Uwe,很遗憾,不行。就像Pascal分析器一样,它只适用于源代码引用。 - Bruce McGee

0
在Delphi或Notepad++中,使用“在文件中查找”功能搜索MEGADATAMODULE,并确保包括整个源代码分支。这样可以找到所有实例。您还可以使用Notepad++在所有.dcp、.bpl、.dll和.exe二进制文件上进行搜索,以确定哪些应该重新构建。

2
据我所知,Delphi 中的“在文件中查找”功能无法在 DFM 文件中查找引用。 - Uwe Raabe
1
如果你使用“在目录中搜索”并使用适当的文件掩码,而不是“在项目组中搜索所有文件”,那么它就会起作用。 - Tuncay Göncüoğlu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接