Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-01-2006
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Forms Sombreados

Hola Amigos !

Encontré una curiosidad para sombrear los forms en http://www.swissdelphicenter.ch/de/showcode.php?id=1296

Lo que he podido comprobar que si muestro el form de manera 'No Modal' (Form.Show) todo funciona correctamente, pero si lo muestro 'Modal' (Form.ShowModal) entonces la parte del nuevo form que se encuentre sobre otro form de la misma aplicación no se sombrea, y la que aparece fuera de la aplicación principal sí que se sombrea correctamente. En este caso particular también ocurre que si paso a otra aplicación de windows cualquiera (llámese Word, etc. ...., el mismo Delphi en modo Debug, ...), y vuelvo a mi aplicación, el sombreado aparece correctamente en cualquier caso .

Alguna ayudita del por qué y como solventarlo ?

Gracias y saludos a todos !
__________________
Piensa siempre en positivo !
Responder Con Cita
  #2  
Antiguo 14-01-2006
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Buscando información adicional al respecto, encontré lo siguiente :
Cita:
After reading the MS website, the shadow is displayed to show the Z order. So the shadow may be truncated if other windows on the desktop are placed higher in the Z order.
Alguien me puede ayudar como hacer de una ventana existente, la de mayor 'orden Z' ?
__________________
Piensa siempre en positivo !
Responder Con Cita
  #3  
Antiguo 14-01-2006
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Sigo investigando ...

Por otro lado he visto que al parecer hace falta la siguiente línea adicional de código :
Código:
SystemParametersInfo(SPI_SETDROPSHADOW,0,Pointer(true),0);
pero si lo intento en mi Delphi 2005, me dá error de 'Invalid TypeCast' con Pointer(true). Ya que los punteros todavía no es mi fuerte, me podría decir alguien por favor como hacer que el parámetro que debe ser de tipo puntero, me señale a 'True' ?

Esto es lo que aparece en la ayuda de Delphi bajo 'SystemParametersInfo'
Cita:
The SystemParametersInfo function retrieves or sets the value of one of the system-wide parameters. This function can also update the user profile while setting a parameter.

BOOL SystemParametersInfo( UINT uiAction, UINT uiParam, PVOID pvParam, UINT fWinIni);...
SPI_SETDROPSHADOWEnables or disables the drop shadow effect. Set pvParam to TRUE to enable the drop shadow effect or FALSE to disable it. You must also have CS_DROPSHADOW in the window class style.
Saludos de nuevo !
__________________
Piensa siempre en positivo !
Responder Con Cita
  #4  
Antiguo 14-01-2006
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
A pesar de todo esto ...
Código Delphi [-]
procedure TForm.CreateParams(var Params: TCreateParams);
const
  CS_DROPSHADOW = $00020000;
var
  B : longbool;
begin
  inherited;
  B := True;
  SystemParametersInfo(SPI_SETDROPSHADOW,0,B,0);
  Params.WindowClass.Style := Params.WindowClass.Style or CS_DROPSHADOW;
end;
sigue sin funcionar con Form.Showmodal
__________________
Piensa siempre en positivo !
Responder Con Cita
  #5  
Antiguo 16-01-2006
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
!!

Finalmente me contesto a mi mismo en todo este post !!

Ya lo conseguí ...

Encontré en la propia ayuda de Delphi lo siguiente :
Cita:
The PopupMode property controls how the top-level form behaves with respect to Window's WS_POPUP style. A window that has the WS_POPUP style is always above its "owner" in Z-order.
De esta manera he conseguido el sombreado también en el form que se llama con ShowModal
Código Delphi [-]
 Form2 := TForm2.Create(Self);
Form2.PopupMode := pmAuto;
Form2.ShowModal;
Saludos a todos !
__________________
Piensa siempre en positivo !

Última edición por gluglu fecha: 16-01-2006 a las 19:14:10.
Responder Con Cita
  #6  
Antiguo 16-01-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
gluglu, te agradezco que hayas continuado y concluido este hilo tú sólo. Mucha gente, al no recibir respuesta, opta por no publicar la suya propia una vez que la encuentran. Da gusto ver que esta vez no fue así.

Me resta una pregunta: ¿qué versión de Delphi usas? Porque no veo la propiedad PopupMode por ningún lado.
Responder Con Cita
  #7  
Antiguo 16-01-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Pues según, parece que esta propiedad la agregaron desde Delphi 8.

http://blogs.borland.com/abauer/arch...02/10/295.aspx


Saludos...
Responder Con Cita
  #8  
Antiguo 17-01-2006
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Gracias a David 'dec' pude crear mi propio avatar, incluyendo la versión del Delphi que utilizo, así como la BD que uso.

Estaba programando en D2005 pero ya me estoy pasando por completo a D2006. Cierto es que como llevo poquito tiempo en el nuevo mundo del Delphi, empezé directamente con la versión más actual, por lo que no sabía que dicha propiedad no se encontraba disponible en versión anteriores a D8.

Lo que sí creo es que la indicación que viene en el primer link que expuse, con respecto a sombrear los forms, sirve para todas las versiones de Delphi, pero yo me encontraba el problema con aquellas ventanas que eran 'modales'.

Seguro que junto con la explicación que viene en el link que ha dado maeyanes, debe existir una manera de solucionar el orden Z de las ventanas modales en D7 o anteriores, y de esta manera poder hacer uso de los forms sombreados incluso en versiones modales.

Debo añadir a todo este hilo que no especifiqué que además hay que activar la propiedad FormStyle = fsStayOnTop del form que se quiere sombrear.

En cualquier caso es un placer para mí compartir con todos vosotros mis averiguaciones, así como aprovechar para daros las gracias a todos por la ayuda que siempre me prestais en mis consultas.

Un saludo a todos.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #9  
Antiguo 30-10-2006
oregon oregon is offline
Miembro
 
Registrado: oct 2006
Posts: 90
Poder: 18
oregon Va por buen camino
Sombreado de un form

Saludos Gluglu,

Estoy intentando aplicar tus conocimientos sobre sombreado a un form de tipo showmodal, pero no consigo averiguar como y donde poner cada parte del código: ¿en el form principal? ¿en el form que se visualiza como modal?...
He hecho varias pruebas, pero todas ellas infructuosas-

¿me puedes hechar una mano con esto?
Muchas gracias!
Responder Con Cita
  #10  
Antiguo 23-08-2007
warbird warbird is offline
Registrado
 
Registrado: nov 2006
Posts: 2
Poder: 0
warbird Va por buen camino
Exclamation

Tengo el mismo problema con el que iniciaste el hilo, no logro que un form modal haga sombra en los formularios de la aplicación, si hace sombra en cualquier parte fuera de la misma, pero a los forms de la aplicación no les hace sombra.

Seguí todos tus consejos sin embargo no logro hacerlo funcionar. Tal vez podrías publicar el código completo, para ver si me estoy perdiendo algo.

Gracias

Responder Con Cita
  #11  
Antiguo 23-08-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Al crear un Form en tiempo de ejecución lo que hago es :
Código Delphi [-]
Form1 := TForm1.Create(Self);
Form1.PopupMode := pmAuto;
Form1.ShowModal;
El Form1 tiene la propiedad FormStyle := fsStayOnTop.

Y en el Form1 :
Código Delphi [-]
TForm1 = class(TForm)
  ....
private
  { Private declarations }
public
  { Public declarations }
protected
  procedure CreateParams(var Params: TCreateParams); override;
end;
 
procedure TForm1.CreateParams(var Params: TCreateParams);
const
  CS_DROPSHADOW = $00020000;
begin
  inherited;
  Params.WindowClass.Style := Params.WindowClass.Style or CS_DROPSHADOW;
end;

Al menos así me funciona a mi sin ningún tipo de problema.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #12  
Antiguo 24-08-2007
warbird warbird is offline
Registrado
 
Registrado: nov 2006
Posts: 2
Poder: 0
warbird Va por buen camino
Funcionó, gracias por responder.
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
Estilo xp con forms mdi fabianbbg Varios 15 13-01-2006 16:40:47
Creacion y destruccion de forms lbidi Varios 7 01-09-2005 18:07:34
forms con distintas busquedas tablas Sayuri Conexión con bases de datos 1 02-08-2005 16:50:57
Problemas con las cuentas en sql plus 8 y forms 6 !! gunshit Oracle 3 26-08-2004 20:24:11
Más sobre forms Hijos y Nietos apicito OOP 2 24-07-2003 08:33:57


La franja horaria es GMT +2. Ahora son las 17:28:28.


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