Lorsque Styles
autre que le style natif «Windows» sont choisis, une classe StyleHook
commencera à accrocher les messages Windows pertinents pour la peinture aux contrôles. Il existe différentes classes StyleHook
pour différentes classes de contrôle.
Dans le cas du TPageControl
, il s'agit du TTabControlStyleHook
. La combinaison hook-class est enregistrée avec TCustomStyleEngine.RegisterStyleHook(TCustomTabControl, TTabControlStyleHook);
dans le constructeur de classe de TCustomTabControl
. Cette classe de crochet est en train de surcharger la peinture des contrôles, car elle peindra le TCustomTabControl
lui-même lorsqu'un style est activé.
Qu'est-ce qui peut être fait est désinscription par défaut TStyleHookClass
et enregistrer un qui permettra la peinture de développeur:
TCustomStyleEngine.UnRegisterStyleHook(TCustomTabControl, TTabControlStyleHook);
TCustomStyleEngine.RegisterStyleHook(TCustomTabControl, TMyTabControlStyleHook);
Où TMyTabControlStyleHook
est le suivant:
type
TMyTabControlStyleHook = class(TTabControlStyleHook)
public
constructor Create(AControl: TWinControl); override;
end;
constructor TMyTabControlStyleHook.Create(AControl: TWinControl);
begin
inherited Create(AControl);
OverridePaint := False;
end;
Ce n'est cependant pas l'équivalent exact peindre uniquement les onglets dans le TPageControl
, car le TTabControlStyleHook
est chargé de peindre le contrôle complet TPageControl
.
Mais TTabControlStyleHook
a le procedure DrawTab(Canvas: TCanvas; Index: Integer); virtual;
qui peut être surchargée pour cela.
type
TMyTabControlStyleHook = class(TTabControlStyleHook)
strict protected
procedure DrawTab(Canvas: TCanvas; Index: Integer); override;
end;
procedure TMyTabControlStyleHook.DrawTab(Canvas: TCanvas; Index: Integer);
begin
DrawTabOverride(Canvas, Index, TabRect[Index], TCustomTabControl(Control).MouseInClient);
end;
Où DrawTabOverride
est quelque chose comme ça
procedure DrawTabOverride(Canvas: TCanvas;
TabIndex: Integer; const Rect: TRect; Active: Boolean);
il peut être appelé en cas OnDrawTab
lors de l'établissement d'origine et dans la classe StyleHook DrawTab
quand style.
Ce sont des styles VCL plutôt que des thèmes. Et la version de Delphi compte souvent pour de telles questions. –