【问题标题】:Modifying VCL Components [duplicate]修改 VCL 组件 [重复]
【发布时间】:2011-10-27 11:51:48
【问题描述】:

可能重复:
Replacing a component class in delphi

有没有人有任何关于修改 VCL 组件并使它们在 IDE 中相对默认的提示?这意味着不一定是从它们继承而来,而是在似乎不允许在后代对象中出现此类事情的地方更改功能。如果它们可以用来代替标准组件,那也是一个好处。

例如,我想做的一件事是在 TButton 上使用 alpha 混合鼠标悬停。我注意到没有 OwnerDraw 事件,并且修改按钮绘制方式的代码似乎不在我可以覆盖的地方。有什么建议,还是我必须从 VCL 代码中删除 TButton 及其所有祖先并直接修改它?

【问题讨论】:

  • 我实际上认为这个问题不是重复,而是过于分散和模糊,因此无法回答。
  • 不是真正的重复,链接确实没有进一步回答这个问题。也就是说:当您收到“您无法覆盖此”消息,或者您需要更改私有方法中的代码(“基类中不存在方法”消息)时,您会怎么做?希望这不是“分散和模糊”。

标签: delphi components vcl


【解决方案1】:

您可以选择以下方法之一:

  • 覆盖表单的ReadState,如here 所述
  • 使用 interposer 类,如 herehere 所述
  • 分配一个新的WindowProc,如here 所述。

【讨论】:

  • 从 TCustomButton 派生,而不是从 TButton 派生。这使您可以更好地控制已发布的属性。
【解决方案2】:

您提出了几个与开发自定义 V.C.L. 相关的问题。控制。

由于这是一个非常广泛的主题,您可能需要浏览或搜索互联网。

作为一个快速的问题,有几种方法可以开发或扩展控件。

有时,同一个控件可以用不同的方式开发, 其他,这取决于您要开发的控件类型。

您还提到了如何制作控件,与 Delphi I.D.E. 交互

Delphi 控件与包一起使用,您可以使用没有控件的普通库制作包,您可能希望在制作控件之前开始这样做。

您可以制作一个完全不交互的控件,仅通过运行应用程序来工作,然后添加与 Delphi I.D.E. 的交互。

在 Delphi 中,当您开发一个控件并希望将其放在窗体上时,在内部进行设计时,它就像 Delphi 是您的应用程序,并且已经拥有您的控件。

【讨论】:

    【解决方案3】:

    如果您想更改应用程序中所有 TButton 的外观,您可以完全不修改 VCL。当存在数百个按钮组件时,我认为没有必要自己修改甚至子类化 VCL 控件。例如,对于 alpha 混合鼠标悬停,只需查看 TMS 控件即可。

    但是,对于自己动手的技术;方法一(推荐简单)是简单地将所有 TButtons 从您的应用程序中取出并用其他东西替换它。通过 gExperts 可以轻松完成 VCL 组件更换(全局)。要了解如何将标准控件外观(按钮的外观)与在 Delphi 代码中绘制的一些重叠元素相结合,请参阅 TBitBtn 作为示例。与其继承 TButton 或 TCustomButton,我建议您检查 TBitBtn 源代码,然后从它开始。

    方法二(不推荐这么简单)是开始使用皮肤系统,它可以在标准控件上绘制完全不同的外观。

    【讨论】:

      猜你喜欢
      • 2011-10-28
      • 2015-08-08
      • 2012-05-15
      • 2017-03-22
      • 2021-12-28
      • 1970-01-01
      • 2018-10-15
      • 2020-12-14
      • 1970-01-01
      相关资源
      最近更新 更多