10

在 Delphi 表单中,我想将一个可视组件替换为另一个。示例:我想用来自 3rd 方包的 ElPanel 替换 Panel 组件。

我希望将第一个组件的所有相同属性和事件转移到新组件,并将属于第一个组件的所有组件(例如工具栏、备忘录、状态栏等)最终放置在新组件上正是他们在第一个上的位置。

除了将新组件添加到表单并精心地将每个属性、事件和组件一个接一个地传递给它之外,是否有最好/最简单的方法来做到这一点?

4

7 回答 7

12

我这样做如下:

  1. 右键单击表单并选择(以文本形式查看)。
  2. 按 Ctrl + F 搜索 Component 类名,如 TPanel 并将其替换为 TElPanel
  3. 切换回表单(以表单形式查看)
  4. 在接口部分,将 TPanel 替换为 TElPanel。

如果您有许多组件使用 GExperts 将是更可行的解决方案。

于 2008-10-27T12:53:07.830 回答
10

您可以使用GExperts,也可以手动操作。

要手动完成,请在记事本中打开 .dfm 并替换所有类名。(例如,将 TPanel 替换为 TElPanel)。完成所有更改后,使用记事本打开 .pas 文件,然后执行相同操作。

确保将所需的单位添加到您的使用子句中。

然后在 IDE 中打开表单并清理任何不匹配的事件或未知属性问题。

于 2008-10-27T02:31:29.020 回答
6

如果我记得优秀的免费 G​​Experts 插件就是这样做的。右键单击您的表单并选择“替换组件”。http://www.gexperts.org

于 2008-10-27T01:21:10.207 回答
2

恕我直言,替换组件 GExpert 的最大缺点是它改变了源代码中组件的顺序。这对 VCS 不是很友好。:-)

于 2008-11-11T09:01:53.623 回答
1

如果您在容器中有其他组件,使用 GExperts 进行此替换将导致 IDE 中出现一些丑陋的异常和可能的意外行为。
因此,最好的解决方案是在您想要的位置(IDE 内部或外部)编辑 .dfm 文件并手动替换您想要更改的组件的类型。也许它也会导致一些异常,但 IDE 会管理它们。
如果您在 IDE 中执行此操作,则在切换到设计视图后,如果您立即保存 .dfm,IDE 会要求您更改与您接触的组件相关的变量类型,让您自由地去做。

于 2008-10-30T02:34:32.977 回答
1

要在文本和二进制 dfm 格式之间进行转换,请使用 Delphi bin\ 目录中的 convert.exe 工具。– Tim Knipe(10 月 28 日 4:15)

您还可以使用表单设计器的上下文菜单 - 至少在 BDS 2006 中。它是最后一个菜单项(德语 IDE 中的“Text-DFM”)。

于 2008-11-11T09:05:52.880 回答
0

在我的项目中,我必须将几十种形式从一组组件转换为另一组。我创建了小的 perl 脚本来转换组件及其属性并进行所有必要的映射。该脚本是快速而肮脏的解决方案,但它是高度可配置的。它扫描项目目录中的所有 dfm 和 pas 文件,并根据您应在 ObjectBeginFound、PropertyFound、ObjectEndFound 过程/事件中提供的规则转换 dfm 组件定义。

DFM 文件应为文本模式。在 Delphi 5 文件上测试。我不知道它是否会与新版本兼容。发现后请发帖。

用法:perl.exe cxdfm.pl > logfile.txt

下载链接 http://dl.dropbox.com/u/15887789/cxdfm.pl

于 2011-02-08T10:32:19.463 回答