Delphi:比较两个组件之间的属性

时间:2009-12-11 13:14:35

标签: delphi components

我想比较两个组件的“状态”,比如Comp1: TSomeComponentComp2: TSomeComponent,即我想比较两个组件的所有已发布属性的值。某些属性已编制​​索引,例如TListBox.Items属性。是否有捷径可寻?我是否必须调用一些迭代的RTTI代码?

3 个答案:

答案 0 :(得分:2)

一种简单的方法是使用WriteComponent对它们进行序列化,并比较生成的字符串。但请注意,这只会比较published,而不是public属性。但这就是你所说的,所以......

请注意,这会使索引属性的 order 显着。这可能是也可能不是你想要的。

答案 1 :(得分:0)

不幸的是,据我所知,在Delphi中没有简单的比较函数。 (我已经在D2007停了。)你可以在基类中添加一个“比较”方法,并构建该方法中所有字段的比较。 (它应该接受同一基类的一个参数。)使用D2007,您可以将其构建为辅助类,但仍需要指定字段。 其他类可以从这个基类继承并覆盖基本的Compare方法。

使用RTTI可以更容易地比较不同类型的类的字段,但它很复杂且容易出错。它需要对各种不同的类进行大量测试。

答案 2 :(得分:0)

我使用的技巧(但我想在IDE中集成这样的东西)是复制与2个组件相关的dfm部分(使用ALT + F12)来访问dfm,然后我将2个组件粘贴到NotePad++我使用Compare插件来比较2。 它提供了一个很好的视觉输出,但是这比在IDE中选择更多组件(即使是从不同的窗口)花费更多的时间,然后将它们与IDE中内置的比较工具进行比较。