我想覆盖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;
答案 0 :(得分:2)
如果它是可见的(受保护的,公共的或已发布的)和虚拟的,那么无论树有多远,你都可以覆盖它,就好像它是在TProgressBar中声明一样。