我在Lazarus中创建了一个基于TPaintBox的新组件。现在,在对象检查器中,我具有属于此基本组件(TPaintBox)的所有属性和事件。
我的问题是:我可以为组件隐藏所选的属性和事件吗?
例如,我只想保留Width和Height属性。
你能帮我吗?
答案 0 :(得分:10)
属性/事件一旦发布,就不能取消发布。
但是,至少可以从Object Inspector中将其隐藏[em] 。
设计时代码在IDE中注册了组件之后,它可以:
在Delphi中,从DesignIntf
单位致电UnlistPublishedProperty()
。
在拉撒路,从RegisterPropertyEditor()
单元调用PropEdits
,以注册属性/事件的THiddenPropertyEditor
类(请参阅拉撒路论坛中的Hide Properties (UnlistPublishedProperty))。
答案 1 :(得分:6)
不确定拉撒路,但在Delphi中,TPaintBox
是TGraphicControl
的轻量后代。它的大部分声明只是发布属性。我不知道您的组件在做什么,但是直接从TGraphicControl
派生它并在实际需要的地方复制TPaintBox
代码可能会更容易。然后,您可以仅发布所需的属性。请注意,您仍然拥有在TControl
和TComponent
中声明发布的那些属性。
答案 2 :(得分:2)
不,您不能隐藏(取消发布)已发布的属性。
在Delphi中,大多数对象都是基于具有所有相同属性的父类,但是大多数都是隐藏的。
因此,尽管您无法隐藏公开的属性,但通常可以通过将类基于TCustomxxx来实现所需的功能。
不幸的是,TPantbox是一个例外。它是从TGraphicControl继承的,但又从TControl继承的,TControl已经具有许多已发布的属性,包括AlignWithMargins,CustomHint和其他几个属性,又是从TComponent继承的,TComponent已发布Name和Tag。公平地说,您肯定需要名称,而Tag不是我想的问题。
如果您只需要回到TGraphicControl,那还不错。只需复制一个成员和几个例程。但是要回到TComponent,这实际上是您不可行的,以隐藏许多属性。