【问题标题】:Hide properties and events in new component在新组件中隐藏属性和事件
【发布时间】:2019-05-09 15:55:58
【问题描述】:

我在 Lazarus 中创建了一个基于 TPaintBox 的新组件。现在在对象检查器中,我拥有属于此基本组件 (TPaintBox) 的所有属性和事件。

我的问题是:我可以隐藏为我的组件选择的属性和事件吗?

例如,我想只保留可见的 Width 和 Height 属性。

你能帮帮我吗?

【问题讨论】:

标签: delphi components lazarus freepascal


【解决方案1】:

不,您不能隐藏(取消发布)已发布的属性。

在 Delphi 中,大多数对象都基于具有所有相同属性的父类,但大多是隐藏的。

因此,虽然您不能隐藏公开的属性,但您通常可以通过将您的类基于 TCustomxxx 来实现您想要的。

遗憾的是,TPaintbox 是一个例外。它是 TGraphicControl 的后代,但又是 TControl 的后代,TControl 已经具有许多已发布的属性,包括 AlignWithMargins、CustomHint 和其他几个属性,而它又是 TComponent 的后代,它已发布了 Name 和 Tag。公平地说,你肯定需要名字,我认为标签不是问题。

如果您只需要返回 TGraphicControl,那还不错。只有一个成员和几个要复制的例程。但是要返回到 TComponent,您需要这样做来隐藏许多属性是不可行的。

【讨论】:

  • 不,您不能隐藏(取消发布)已发布的属性” - 实际上,您可以。看我的回答
  • @Remy 谢谢 - 我不知道。
  • FWIW,并非您提到的所有TControl 属性都是默认发布的。 Cursorpublic,如果你愿意,你可以把它改成published
  • @JerryDodge 谢谢。已更正。
【解决方案2】:

属性/事件一旦发布,就无法取消发布。

但是,它至少可以从对象检查器中隐藏(代码仍然可以访问它)。

在您的设计时代码向 IDE 注册组件后,它可以:

【讨论】:

    【解决方案3】:

    不确定 Lazarus,但在 Delphi 中 TPaintBoxTGraphicControl 的轻量级后代。它的大部分声明只是发布属性。我不知道您的组件在做什么,但直接从TGraphicControl 派生它并在实际需要的地方复制TPaintBox 代码可能更容易。然后您可以只发布您想要的属性。请注意,您仍然拥有在 TControlTComponent 中发布的那些声明的属性。

    【讨论】:

    • "不确定 Lazarus,但在 Delphi 中 TPaintBoxTGraphicControl 的轻量级后代" - 在 Lazarus 中也是如此。
    猜你喜欢
    • 1970-01-01
    • 2021-04-17
    • 2015-10-26
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多