Comment désactiver VCL styles en Delphi
j'utilise le nouveau système VCL styles dans Delphi XE2. Il fonctionne bien, mais je souhaite le désactiver pour une forme particulière qui a un certain nombre d'images sur elle (un splash/à propos de la forme). Le problème est que je ne peux pas trouver une propriété de la forme qui l'associe à un style particulier, et ne peut donc pas la désactiver pour cette forme seulement. Il ne semble y avoir que le global TStyleManager
classe qui semble être statique.
TStyleManager.TrySetStyle('Windows')
, montrer la forme, puis retournez à l'origine de style lorsque le formulaire est fermé?
2 réponses
les Styles VCL appliquent une peau à toutes les applications VCL, mais vous pouvez désactiver les Styles VCL pour une classe de contrôle particulière. Donc si vous voulez désactiver les Styles VCL pour une forme particulière, vous pouvez utiliser le RegisterStyleHook
fonction passant le type de la forme et de la TStyleHook
classe qui est une classe de crochet de style vide.
cette ligne de code va désactiver les Styles VCL dans toutes les formes du type TFormChild:
TStyleManager.Engine.RegisterStyleHook(TFormChild, TStyleHook);
maintenant, si vous lancez tout ce code contrôle de la forme, TFormChild
toujours peint avec la VCL Styles, afin de corriger cela, vous devez désactiver le Style par défaut crochet pour tous les contrôles du formulaire à l'aide d'un truc comme ça
unit uChild;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TButton = class(Vcl.StdCtrls.TButton); //This declaration is only for disabling the TButton of this form
TFormChild = class(TForm)
Button1: TButton;
private
{ Private declarations }
public
{ Public declarations }
end;
et maintenant vous pouvez désactiver les Styles VCL du TButton de cette forme aussi bien avec ce code
TStyleManager.Engine.RegisterStyleHook(uChild.TButton, TStyleHook);
si vous voulez plus d'informations sur L'utilisation de la classe TStyleHook, consultez l'article Exploring Delphi XE2-Vcl Styles Part II.
la façon la plus facile est de mettre la forme splash dans une DLL séparée. Comme ça, la styleuse ne la touchera pas.