delphi delphi-xe2 skinning vcl-styles

Cómo deshabilitar los estilos VCL en Delphi



delphi-xe2 skinning (2)

Estoy usando el nuevo sistema de estilos VCL en Delphi XE2. Funciona muy bien, pero deseo desactivarlo para una forma particular que tiene una cantidad de imágenes (una forma de bienvenida / sobre). El problema es que parece que no puedo encontrar una propiedad del formulario que lo asocie con un estilo en particular, por lo que no puedo desactivarlo solo para ese formulario. Parece que solo TStyleManager clase global TStyleManager que parece ser estática.

Teniendo esto en cuenta, ¿es la única manera de lograrlo llamando a TStyleManager.TrySetStyle(''Windows'') , muestre el formulario y luego vuelva a colocarlo en el estilo original cuando se cierra el formulario?


La forma más sencilla es colocar la forma de bienvenida en una DLL separada. De esa manera el styler no lo tocará.


Los estilos VCL aplican un aspecto a toda la aplicación VCL, pero puede deshabilitar los estilos VCL para una clase de control particular. Entonces, si desea deshabilitar los estilos VCL para un formulario en particular, puede usar la función RegisterStyleHook pasando el tipo del formulario y la clase TStyleHook , que es una clase de gancho de estilo vacío.

Esta línea de código deshabilitará los estilos VCL en todas las formas del tipo TFormChild:

TStyleManager.Engine.RegisterStyleHook(TFormChild, TStyleHook);

Ahora, si ejecuta este código todos los controles del formulario, TFormChild seguirá pintado con los estilos VCL, por lo que para corregirlo, debe desactivar el enganche de estilo predeterminado para todos los controles del formulario usando un truco como este.

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;

y ahora puede deshabilitar los estilos VCL del botón TB de este formulario también con este código

TStyleManager.Engine.RegisterStyleHook(uChild.TButton, TStyleHook);

Si desea obtener más información sobre el uso de la clase TStyleHook, consulte el artículo Exploración de Delphi XE2 - Estilos VCL Parte II .