2012-03-28 79 views
12

¿Hay un buen tutorial de estilos de VCL donde veamos cómo dinámicamente (en tiempo de ejecución) cargar/cambiar el estilo?Tutorial de estilos de Delphi VCL: cómo cambiar el estilo en el tiempo de ejecución

Esto debería funcionar con Delphi XE2 y superior, ya que XE2 es la primera versión con estilos de VCL.

+0

Hay un montón de estilos VCL enlaces relacionados en http://www.tindex.net/VCL/VCLStyles.html – LachlanG

+0

ser cuidadosamente con ventana modal. todavía error en DX10 - http://stackoverflow.com/questions/33606625/delphi-xe7-dx10-using-tstylemanager-trysetstyle-in-runtime-when-modal-window-d – Zam

Respuesta

24

estoy añadiendo una respuesta porque la información local, a menudo se prefiere sólo enlaces.

He aquí los hechos clave que necesita saber antes de empezar:

  1. Muchos controles VCL tienen propiedades de color, pero esas propiedades van a ser ignorado cuando estilos están encendidas, y el valor predeterminado "controles comunes" al igual que Button van a ser dibujados por Delphi, en lugar de usar el estilo XP o Windows 2000 que "viene con Windows".

  2. De alguna manera, en lo profundo de su aplicación, los estilos VCL colocan ganchos que se encargan de pintar los controles. Todo lo que pueda manejar se dibujará usando una "máscara" en la parte superior de los controles normales. Muchas personas lo llaman "skinning the vcl" y, antes de los estilos VCL, es posible que haya encontrado un sistema skin externo. Ahora está integrado.

  3. Cualquier cosa que no esté enganchada, seguirá teniendo el estilo normal. Entonces, la mayoría de los controles de terceros y algunos bits de la VCL no serán temáticos. No esperes resultados instantáneos perfectos. Además, es posible que a veces vea algún parpadeo momentáneo o fallas técnicas como resultado del desollado, eso es de esperar. Agregue la carga de estilos en el tiempo de ejecución, y la calidad final de su resultado es una incógnita. No puede garantizar necesariamente que el estilo que se carga en tiempo de ejecución contenga todo lo que desee que contenga. Tampoco puede garantizarlo con uno que incluya estáticamente en su aplicación, pero al menos los que incluye estáticamente podrían ser verificados por su equipo de control de calidad (que podría ser usted).

Y aquí están los pasos más simples para comenzar: Realmente, solo los pasos 2 al 4 son esenciales.

  1. Haga clic en Archivo -> Nuevo -> Proyecto VCL Forms.

  2. Haga clic con el botón derecho en las opciones del proyecto en el panel Administrador de proyectos y haga clic en Propiedades. Vaya a Aplicación -> Apariencia

  3. Haga clic en un estilo personalizado para activarlo. (Amakrits es el primero en mi lista, así que haré clic en eso).

  4. Haga clic en el cuadro combinado de Estilo predeterminado y cámbielo por otro valor diferente al predeterminado.

  5. Ponga algo en su formulario para que no esté vacío. (Un botón, un cuadro de lista, etc.).

  6. Ejecuta tu aplicación.

enter image description here

Ahora, cosas avanzadas: cambiar su estilo en tiempo de ejecución:

utilizo este botón clic y FormCreate de hacer eso:

Añadir fdefaultStyleName:String; a la sección privada de su formulario.

Asegúrate de que Vcl.Themes esté en tu cláusula de uso.

procedure TForm1.Button1Click(Sender: TObject); 
begin 
if Assigned(TStyleManager.ActiveStyle) and (TStyleManager.ActiveStyle.Name<>'Windows') then begin 
    TStyleManager.TrySetStyle('Windows'); 
end else begin 
    TStyleManager.TrySetStyle(fdefaultStyleName); // whatever was in the project settings. 
end; 

end; 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
if Assigned(TStyleManager.ActiveStyle) then 
    fdefaultStyleName := TStyleManager.ActiveStyle.Name; 

end; 
19

página de inicio Ver RRUZ para un montón de cosas acerca de los estilos de VCL.

Aquí es una demostración primaria donde se puede cargar un par de estilos dinámicamente: exploring-delphi-xe2-vcl-styles-part-i

2

Un ejemplo (procedimiento público). Recuerde que usa Vcl.Themes;

procedure TData.AllowSKIN(bSKIN:boolean); 
var 
    sSKIN:string; 
begin 
    sSKIN := 'Aqua Light Slate'; 
    if not bSKIN then sSKIN := 'Windows'; 
    TStyleManager.TrySetStyle(sSKIN); 
end; 
Cuestiones relacionadas