我正在使用属性检查器(for example the nice JvInspector in the JVCL library),它很好地让我查看和编辑我的类'TMyClass'的已发布属性。 TMyClass
来自TFrame
并且有一些已发布的属性,这些属性是我查看和编辑所需的唯一属性。当然TFrame
有很多VCL属性,都是已发布的,我也看到了。
如何抑制祖先属性RTTI并保留我自己发布的属性?我正在使用XE3所以世界是我的牡蛎...也许。
答案 0 :(得分:8)
从TCustomFrame
导出您的课程,并从您的课程中仅发布您需要的属性。虽然你基本上不能隐藏已经发布的属性,但是有很多它们受到保护,并且通过使用TCustomFrame
类作为你自己类的祖先来保持隐藏。
这就是VCL中几乎每个控件都是在类层次结构中组成的。例如,TLabel
是TCustomLabel
后代,其在类链中的唯一作用是发布您可以在对象检查器中看到的属性。
答案 1 :(得分:4)
FWIW,我已经找到了一个RTTI解决方案 - 即只允许不属于祖先类或类的属性,换句话说,你已经在当前类中添加,发布的属性。 JvInspector有一个BeforeItemCreate
事件,其中包含将出现在检查器中的属性的名称。此解决方案测试属性名称是否为祖先类的成员,并且仅当它不是时,它才会在检查器中显示它。好处是任何检查员代码都没有变化。
uses
TypInfo;
procedure TForm1.JvInspectorBeforeItemCreate(Sender: TObject;
Data: TJvCustomInspectorData; var ItemClass: TJvInspectorItemClass);
begin
if IsPublishedProp(TFrame, Data.Name) then
ItemClass := nil;
end;
答案 2 :(得分:3)
在运行时创建TMyClass
组件/框架。
但是为了保持在设计时编辑属性的能力,请不要从TMyClass
下降TFrame
。相反,来自:
TCustomPanel
如果你想要一个边框,TCustomControl
如果你能自己画边框,TWinControl
如果你可以没有边框。当然,您的TMyClass
组件不会再出现在插入框架对话框中,但只会像其他组件一样出现。