我想要覆盖OnPaint-Event of TBCDProgressBar组件。这是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; 发布于 2017-02-14 12:11:15
如果它是可见的(受保护的、公共的或发布的)和虚拟的,那么不管它在树的上面有多远,都可以覆盖它,就像它是在TProgressBar中声明的一样。
https://stackoverflow.com/questions/42225195
复制相似问题