Delphi 非 rtti 检查员

Posted

技术标签:

【中文标题】Delphi 非 rtti 检查员【英文标题】:Delphi non-rtti inspector 【发布时间】:2012-02-25 09:26:13 【问题描述】:

我有一些虚拟控件,它们是我制作的设计器系统的一部分。它们模仿了 delphi 自己的组件,除了它们是完全由所有者绘制的。我面临的问题是,由于我的属性系统与普通的 Delphi 有些不同 - 我不能使用 RTTI 检查器来编辑属性。

有谁知道一个外观和行为类似于普通 delphi 检查器的检查器,但它允许我通过代码定义属性?

如果可能的话,一个允许我定义枚举的方法:

with edInspector.Items.add('align') do
Begin
  Options.add('alLeft',ftord(TMyAlign.azLeft));
  Options.add('alTop',ord(TMyAlign.azTop));
  Options.add('alRight',ord(TMyAlign.azRight));
  Options.add('alBottom',ord(TMyAlign.azBottom));
  Options.add('alClient',ord(TMyAlign.azClient));
end;

和复杂类型:

with edInspector.Items.add('font') do
Begin
  subitems.add('name',dtString).value:=def_FontName;
  subitems.add('size',dtInteger).value:=def_fontSize;
  subitems.add('color',dtColor).Value:=def_fontColor;
end;

【问题讨论】:

“我的属性系统和普通的Delphi有些不同”是什么意思?您知道公共属性和已发布属性之间的区别吗? 嘿嘿,是的。我从外部系统轮询属性,这意味着它们存储在自定义对象中的名称/值对中。所以它们在普通 RTTI 中是不可见的,我必须手动获取/设置它们 好的,如果您的持久性机制有所不同,请使用声明为“stored False”的已发布属性和内置对象检查器进行设计时编辑。如果您需要有关持久性机制的帮助(即将文本转换为可以分配给正常类型属性的值),请查看 TReader 和 TFiler 是如何完成这项工作的。 你看过JVCL TjvInspector 吗?可以在NeuglsWorkStudio 找到摘要和示例用法。 一个非常旧版本的 DeveloperExpress 的检查器组件允许您将属性添加到具有不同数据类型的编辑器的垂直列表中。这基本上就是我想要的,但最新的 devex 包是为此而发展的,并且只处理 RTTI。我不是在寻找数据库解决方案。更多地考虑用户可以更改的 ajax 数据数组。所以它并不复杂,但我想看起来像 delphi 中的检查器。 【参考方案1】:

试试 Inspex。挺好看的。

http://www.raize.com/DevTools/Inspex/Default.asp

您可以动态添加属性,并且您将获得大多数常见类型的属性编辑器。

它的行为与 Delphi 对象检查器非常相似(它允许您编辑集合,如果您添加多个对象,它会检测哪些属性相同,并隐藏其他属性,并且对属性值执行相同操作)。

如果有多个级别,它会以树状结构显示属性。 您可以通过添加任何 TObject、通过字符串或逐个添加属性来轻松填充它。

截图:

【讨论】:

看起来不错,但不是免费的。我应该说我想要一个免费的替代品。【参考方案2】:

使用Delphi Runtime Inspector,您将能够在运行时查看对象信息。

【讨论】:

您当然应该调整它以符合您的要求。 我不想要运行时信息。我想编辑我自己在运行时通过代码定义的结构。但我不想检查“真实”的对象。

以上是关于Delphi 非 rtti 检查员的主要内容,如果未能解决你的问题,请参考以下文章

Delphi下的RTTI函数大全

DELPHI RTTI

减小Delphi2010程序的尺寸(关闭RTTI反射机制)

哪个 Delphi 版本支持公共方法的 RTTI?

delphi RTTI 反射技术

Delphi XE----Rtti单元一(TRttiContext)