2017-02-14 37 views
2

Я хочу переопределить OnPaint -Event TBCDProgressBar Component. Это компонент для Lazarus (freepascal), я пометил Delphi специально, потому что нет никаких отличий при переопределении событий, и я хочу как можно больше помочь.Override OnPaint-Event TBCDProgressBar

TBCDProgressBar не OnPaint событие в decleration:

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.

Edit: //

Я не знаю, что вы можете изменить его, как обычно, так вот это решение для тех, кто с той же проблемой:

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