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:
Código Delphi
[-]
function IsWinXP: Boolean;
begin
Result:=(Win32Platform = VER_PLATFORM_WIN32_NT) and
(Win32MajorVersion >= 5) and (Win32MinorVersion >= 1);
end;
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.
Código Delphi
[-]
function isDropShadowEnabled: Boolean;
{$IFDEF VER150} const
SPI_GETDROPSHADOW = $1024;
{$ENDIF}
begin
SystemParametersInfo(SPI_GETDROPSHADOW, 0, @Result, 0);
end;
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.
Código Delphi
[-]
procedure TForm1.doActivateDropShadow(Enabled: Boolean);
{$IFDEF VER150} const
SPI_SETDROPSHADOW = $1025;
CS_DROPSHADOW = $20000;
{$ENDIF}
var
teniaSombra: Boolean;
begin
if not IsWinXP then Exit;
teniaSombra:=isDropShadowEnabled;
if Enabled then
begin
SystemParametersInfo(SPI_SETDROPSHADOW, 0, Pointer(True), 0);
SetClassLong(Handle,GCL_STYLE, GetClassLong(Handle, GCL_STYLE) or CS_DROPSHADOW);
end
else SystemParametersInfo(SPI_SETDROPSHADOW, 0, Pointer(False), 0);
RecreateWnd;
SystemParametersInfo(SPI_SETDROPSHADOW, 0, Pointer(teniaSombra), 0);
end;
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.