首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >覆盖OnPaint

覆盖OnPaint
EN

Stack Overflow用户
提问于 2017-02-14 11:39:05
回答 1查看 366关注 0票数 2

我想要覆盖OnPaint-Event of TBCDProgressBar组件。这是Lazarus (freepascal)的一个组件,我故意标记Delphi,因为在重写事件时没有区别,我需要尽可能多的帮助。

TBCDProgressBar的解密中没有OnPaint事件:

代码语言:javascript
复制
  TBCDProgressBar = class(TCDProgressBar)
  private
    FBCThemeManager: TBCThemeManager;
    procedure SetFBCThemeManager(AValue: TBCThemeManager);
  public
    constructor Create(AOwner: TComponent); override;
  published
    property ThemeManager: TBCThemeManager read FBCThemeManager write SetFBCThemeManager;
  end;    

我的第一种方法是跟踪TBCDProgressBar,直到找到OnPaint-Event为止。

结果是:

  • TCDProgressBar = class(TCDControl)
  • TCDControl = class(TCustomControl)
  • TCustomControl = class(TWinControl)

最后在TCustomControl我找到了property OnPaint: TNotifyEvent read FOnPaint write FOnPaint;

我不明白如何从OnPaint重写TCustomControl,使其影响到TBCDProgressBar

编辑://

我不知道您可以像往常一样重写它,所以对于任何有相同问题的人,这里有一个解决方案:

代码语言:javascript
复制
TBCDProgressBarWithOnPaint = class(TBCDProgressBar)
protected
  procedure Paint; override;
end; 

procedure TBCDProgressBarWithOnPaint.Paint;
begin
  inherited;

  // drawing a line on Progressbar
  Canvas.Pen.Color:=clRed;
  Canvas.Line(200,0,200,20);
end;   
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-14 12:11:15

如果它是可见的(受保护的、公共的或发布的)和虚拟的,那么不管它在树的上面有多远,都可以覆盖它,就像它是在TProgressBar中声明的一样。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42225195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档