我想覆盖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。

结果是:


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;

最佳答案

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

关于delphi - 覆盖OnPaint-Event TBCDProgressBar,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42225195/

10-13 02:40