![]() |
Mostar/Ocultar una sombra a un Form en tiempo de ejecución
Este truco es para mostrar u ocultar una sombra, en nuestros Forms en tiempo de ejecución. Es muy habitual encontrar un truco parecido, que consiste en crear el formulario con la Sombra ya puesta, pero pocas veces se explica como ponerla y quitarla en tiempo de ejecución, así que he decidido escribir este truco :)
Este truco sólo funciona en Windows XP. Esta pequeña función nos servirá para saber si la aplicación esta siendo ejecutada en un WinXP:
En esta segunda función lo que obtenemos, es si el usuario activo de Windows, tiene activa la propiedad "Sombras" a los menús (tales como Inicio, PopupMenus, etc...). Esta función la necesitamos para luego restaurar la configuración inicial del usuario.
Aquí viene el código principal del Truco, en donde por parámetros le pasaremos si queremos mostrar u ocultar (activar o desactivar) la sombra en nuestro Formulario.
Como podéis observar, es quizás un poco "basto" la forma que tiene de quitar la sombra (su funcionamiento se basa en poner la propiedad de "Sombras" de Windows a FALSE, así pues ningún menú en nuestro Windows tendrá sombras, recrear la ventana y luego restauramos la propiedad "Sombras" al valor puesto por el usuario. Espero que os sirva este truco. P.D.: La propiedad "Sombras" de Windows que tanto nombro, se puede cambiar desde: "Propiedades de pantalla -> Apariencia -> Efectos... -> "Mostrar sombras bajo los menús" Saludos. |
Hola Xesc,
Acabo de probar este truco, pero no me funciona como esperaba. Esto usando Delphi 7 y Windows XP con el tema por defecto aplicado. Lo único que consigo cuando activo las sombras es que al mover la ventana, el refresco sea más lento que de normal. Pero no experimenta ningún cambio el menú que he creado. Un saludo. |
La sombra deberia aparecer en el "Formulario", o sea en el TForm, no en los menus, ya q por si solos estos ya lo tienen, si la prpiedad de sombras (en el windows) ya estan activadas.
La verdad, esq este truco lo he escrito usando el Delphi2k6, asi q tendre q probarlo con el Delphi 7 a ver si me ocurre lo mismo. P.D.: Yo voy con el tema "Azul" de por defecto. Saludos. |
Por cierto, el resultado deberia ser algo parecido a esto:
http://img180.imageshack.us/my.php?image=consombrasb9.png (Y edito: del mensaje anterior, que no uso el Azul por defecto, sino el Royal (del propio MS, q es parecido al por defecto). Saludos. |
Si lo que quieren es siempre mantener activa la sombra, utilicen algo más profecional, por ejemplo, el siguiente código:
type TForm1 = class(TForm) private { Private declarations } public { Public declarations } protected procedure CreateParams(var Params: TCreateParams); override; // Importante el "Override" !!!! end; var Form1: TForm1; implementation {$R *.dfm} {------------------------------------------------------------} // Con esta función verificamos si el usuario está utilizanco WinXp function IsWinXP: Boolean; begin Result := (Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion >= 5) and (Win32MinorVersion >= 1); end; {------------------------------------------------------------} {------------------------------------------------------------} // Si es WinXP, entonces creamos la sombra procedure TForm1.CreateParams(var Params: TCreateParams); const CS_DROPSHADOW = $00020000; begin inherited; if IsWinXP then Params.WindowClass.Style := Params.WindowClass.Style or CS_DROPSHADOW else end; {------------------------------------------------------------} esto nos evitará estar cambiando sin permiso la configuración al usuario. Recuenden que eso no le agrada a nadie. |
Hola D&W, tu solucion es la mas comun, pero la gracia del truco era poder activar y desactivar la sombra en tiempo de ejecucion. Tu truco pone la sombra, si, pero esta ya no se puede "quitar".
Si es cierto que no agrada lo de cambiar la configuracion, pero siempre va bien saber como se hace (es un truco dentro de otro truco xD). Saludos. |
Por ser un truco dentro de otro truco, está bien, te doy mérito de eso; pero en la práctica, no me parece que no es una buena idea utilizarlo, sería mejor aún proporcionarle al usuario la opción de mostrar/ocultar las sombras en las ventanas.
|
La franja horaria es GMT +2. Ahora son las 13:22:49. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi