Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros temas > Trucos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Los mejores trucos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-09-2006
Avatar de xEsk
[xEsk] xEsk is offline
Miembro Premium
 
Registrado: feb 2006
Posts: 454
Poder: 19
xEsk Va por buen camino
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:
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} // Si es la version 7 (o inferior) de Delphi, entonces declara esta constante
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} // Si es la versión 7 (o inferior) de Delphi, entonces declara estas constantes
const
  SPI_SETDROPSHADOW = $1025;
  CS_DROPSHADOW     = $20000;
{$ENDIF}
var
  teniaSombra: Boolean; // Esta variable recordara si tenia o no activa la opción de las sombras

begin
  // Esta corriendo en un WinXP? Si no es asi, abandona.
  if not IsWinXP then Exit;
  // Antes de cambiar nada, guardamos el estado inicial (config. del usuario de windows)
  teniaSombra:=isDropShadowEnabled;
  // Queremos activar la Sombra?
  if Enabled then
    begin
      // Activa la Sombra
      SystemParametersInfo(SPI_SETDROPSHADOW, 0, Pointer(True), 0);
      SetClassLong(Handle,GCL_STYLE, GetClassLong(Handle, GCL_STYLE) or CS_DROPSHADOW);
    end
  else // Quita la Sombra
    SystemParametersInfo(SPI_SETDROPSHADOW, 0, Pointer(False), 0);
  // Recrea la ventana
  RecreateWnd;
  // Restaura la configuración inicial del usuario  
  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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 13:40:53.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi