覆盖OnPaint-Event TBCDProgressBar

时间:2017-02-14 11:39:06

标签: delphi pascal freepascal

我想覆盖OnPaint - TBCDProgressBar Component的事件。它是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 - 事件。​​

结果是:

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

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

我不明白如何从OnPaint覆盖TCustomControl,以便它影响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;   

1 个答案:

答案 0 :(得分:2)

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