Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-02-2006
Avatar de xEsk
[xEsk] xEsk is offline
Miembro Premium
 
Registrado: feb 2006
Posts: 454
Poder: 19
xEsk Va por buen camino
Como quitar la sombra de una ventana?

Buenos dias,
Tengo un pequeño o gran problema (segun se mire), y es que se poner en tiempo real una sombra de esas "chulas" del WinXP en mi Form, pero no se quitarla en tiempo real!
(Mas info > http://www.swissdelphicenter.ch/de/showcode.php?id=1296)

Aqui os pongo el codigo que uso para poner la sombra al Form en "RealTime":

Código Delphi [-]
// Poner sombra 
procedure TMainForm.btnSombraClick(Sender: TObject); 
const 
  CS_DROPSHADOW = $00020000; 
begin 
  SetClassLong(Handle, GCL_STYLE, GetClassLong(Handle, GCL_STYLE) or CS_DROPSHADOW); 
  RecreateWnd; 
end;

La verdad esq he probado ya varias formas para quitarla una vez puesta, pero nada... aqui mis intentos fracasados:

Código Delphi [-]
 
  SetClassLong(Handle, GCL_STYLE, GetClassLong(Handle, GCL_STYLE)); 
  RecreateWnd; 

  SetClassLong(Handle, GCL_STYLE, GetClassLong(Handle, GCL_STYLE) - DROPSHADOW); 
  RecreateWnd; 

  SetClassLong(Handle, GCL_STYLE, GetClassLong(Handle, GCL_STYLE) or not DROPSHADOW); 
  RecreateWnd; 

  SetClassLong(Handle, GCL_STYLE, GetClassLong(Handle, GCL_STYLE) and not DROPSHADOW); 
  RecreateWnd; 

  SetClassLong(Handle, GCL_STYLE, GetClassLong(Handle, GCL_STYLE) and DROPSHADOW); 
  RecreateWnd;

Última edición por xEsk fecha: 07-02-2006 a las 20:35:17.
Responder Con Cita
  #2  
Antiguo 07-02-2006
Avatar de xEsk
[xEsk] xEsk is offline
Miembro Premium
 
Registrado: feb 2006
Posts: 454
Poder: 19
xEsk Va por buen camino
Ui, un poco mas cerca de la solucion

Parece que ya lo he logrado, creo que es algo chapuza, pero hace lo que yo quiero... asi que ya me vale, hasta que no vea lo contrario xDDD

Aqui mi Chapu-Codigo (Demostracion de funcionamiento):

Código Delphi [-]
  ...
  // Activa la sombra por si estaba desactivada
  SystemParametersInfo(SPI_SETDROPSHADOW, 0, Pointer(True), 0);
  SetClassLong(Handle,GCL_STYLE, GetClassLong(Handle, GCL_STYLE) or CS_DROPSHADOW);
  RecreateWnd;

  // Actualitza el form y espera 1 segundito (para observar q hay sombra)
  Refresh;
  sleep(1000);

  // Desactiva la sombra (del windows entero)
  SystemParametersInfo(SPI_SETDROPSHADOW, 0, Pointer(False), 0);
  RecreateWnd;  // Recrea la ventana

  // Actualiza el form y espera 1 segundito para observar que ya no hay sombra
  Refresh;
  sleep(1000);
  // Activa la sombra a todo el windos otra vez
  SystemParametersInfo(SPI_SETDROPSHADOW, 0, Pointer(True), 0);
  ...

Ahora solo queda mejorarlo, para que no active las sombras de todo el windows en caso de que el usuario las tuviera desactivadas, pero eso ya es mas facil paritiendo de la base que tengo ahora.

Saludos.

Última edición por xEsk fecha: 07-02-2006 a las 15:09:24.
Responder Con Cita
  #3  
Antiguo 07-02-2006
Avatar de xEsk
[xEsk] xEsk is offline
Miembro Premium
 
Registrado: feb 2006
Posts: 454
Poder: 19
xEsk Va por buen camino
Version mejorada

Aqui pongo el codigo final que he dejado en mi programa (comentarios traducidos al español), y funciona bastante bien hasta el momento:

Código Delphi [-]
... 
var 
  DropShadowEnabled: Boolean; // flag para activar/desactivar la sombra 
... 

// Devuelve si el programa corre bajo winxp 
function IsWinXP: Boolean; 
begin 
 Result:=(Win32Platform = VER_PLATFORM_WIN32_NT) and 
         (Win32MajorVersion >= 5) and (Win32MinorVersion >= 1); 
end; 

// Devuelve si el usuario tiene activada la sombra de los menus 
function isDropShadowEnabled: Boolean; 
begin 
  SystemParametersInfo(SPI_GETDROPSHADOW, 0, @Result, 0); 
end; 

// Activa o desactiva la sombra de la ventana 
procedure TMainForm.doActivateDropShadow; 
var 
  teniaSombra: Boolean; 
begin 
  // Config. inicial del usuario 
  teniaSombra:=isDropShadowEnabled; 
  // Hay q poner sombra? 
  if DropShadowEnabled 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 sombra 
    SystemParametersInfo(SPI_SETDROPSHADOW, 0, Pointer(False), 0); 
  // Recrea la ventana 
  RecreateWnd; 
  // Restaura la configuracion de l'usuario 
  SystemParametersInfo(SPI_SETDROPSHADOW, 0, Pointer(teniaSombra), 0); 
end;

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como codifico las transacciones en delphi, y como jalo una vista desde SQL Server? Felipe Conexión con bases de datos 2 06-01-2008 03:00:04
Como quitar las barras del Explorer??? danytorres HTML, Javascript y otros 24 21-10-2005 11:49:57
Como fijar una ventana? juliopag1 Varios 17 13-10-2005 07:00:39
Como muestro una ventana de proceso carlosmoralesm OOP 2 04-06-2004 05:07:48
Como paso un la intancia Tstrings de un TComboBox (ComboBox.items) por parametro? orfeo OOP 1 05-05-2003 07:58:52


La franja horaria es GMT +2. Ahora son las 06:44:57.


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