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.

<!-Avec ceci à l'esprit, est le seul moyen d'atteindre ceci à appeler TStyleManager.TrySetStyle('Windows'), montrer la forme, puis retournez à l'origine de style lorsque le formulaire est fermé?

19
demandé sur RRUZ 2011-12-22 06:13:38

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.

25
répondu RRUZ 2012-09-09 17:37:26

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.

-2
répondu Pieter B 2011-12-22 12:50:50