覆盖 OnPaint-Event TBCDProgressBar

Override OnPaint-Event TBCDProgressBar

我想覆盖 TBCDProgressBar ComponentOnPaint-事件。它是 Lazarus (freepascal) 的一个组件,我故意标记了 Delphi 因为在覆盖事件时没有区别,我希望得到尽可能多的帮助。

TBCDProgressBar 在其声明中没有 OnPaint 事件:

  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。

结果是:

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

我不明白如何从 TCustomControl 覆盖 OnPaint 以影响 TBCDProgressBar.

编辑://

我不知道你可以像往常一样覆盖它,所以这里是任何遇到同样问题的人的解决方案:

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;   

如果它是可见的(受保护的,public 或已发布的)并且是虚拟的,那么无论它在树上有多远,您都可以覆盖它,就像它在 TProgressBar 中声明的那样。