2017-02-14 7 views
2

TBCDProgressBar ComponentOnPaintイベントをオーバーライドしたいと思います。 Lazarus(freepascal)のコンポーネントです。イベントをオーバーライドするときに違いがないので、Delphiに目的のタグを付けました。OnPaintイベントオーバーライドTBCDProgressBar

TBCDProgressBarはそのdeclerationには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;  

を私の最初のアプローチは、私はOnPaint - イベントを見つけるだろうまでTBCDProgressBarをダウン追跡することでした。

結果は以下のとおりであった:

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

そして最後にTCustomControlに私は私がをオーバーライドする方法を理解していないproperty OnPaint: TNotifyEvent read FOnPaint write FOnPaint;

を見つけましたから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; 

答えて

2

保護された(表示されている場合パブリックまたはパブリッシュ)と仮想の場合、TProgressBarで宣言されているかのように、ツリーのどれほど遠くにあっても、オーバーライドできます。

+0

私は試してみました。どうもありがとうございます! – Lyan

関連する問題