2017-02-14 4 views
2

Je souhaite remplacer le OnPaint -Event du TBCDProgressBar Component. C'est un composant pour Lazarus (freepascal), j'ai tagué Delphi volontairement car il n'y a pas de différences lors de la redéfinition des évènements, et je veux autant d'aide que possible.Remplacer OnPaint-Événement TBCDProgressBar

TBCDProgressBar n'a pas l'événement OnPaint dans son 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;  

Ma première approche a consisté à tracer vers le bas TBCDProgressBar jusqu'à ce que je trouverais le OnPaint -Event.

résultat a été:

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

Et enfin TCustomControl j'ai trouvé property OnPaint: TNotifyEvent read FOnPaint write FOnPaint;

Je ne comprends pas comment je peux passer outre OnPaint de TCustomControl de sorte qu'il affecte le TBCDProgressBar.

Edit: //

Je ne savais pas que vous pouvez l'ignorer comme d'habitude, alors voici la solution pour tous ceux ayant le même problème:

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; 

Répondre

2

Si elle est visible (protégé, public ou publié) et virtuel, alors vous pouvez le redéfinir quelle que soit la hauteur de l'arbre, comme s'il était déclaré dans TProgressBar.

+0

J'aurais dû essayer. Merci beaucoup! – Lyan