Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-01-2006
pepe2000 pepe2000 is offline
Miembro
 
Registrado: dic 2003
Ubicación: Cajamarca
Posts: 93
Poder: 21
pepe2000 Va por buen camino
Question poner en gris la parte de atras del form

hola a todos.
Al abrir un formulario con Showmodal, quiero que la parte de atras del formulario se coloque en color gris, para evitar confusión cuando el nuevo formulario sobrepone a los anteriores.
Siempre trabajo con Showmodal para que el usuario sepa en todo momento que operacion le toca hacer, pero al abrir varias ventanas, se mezclan unas con otras creando confusión visual, mi pregunta es como lograr que la parte de atrás del formulario "actual" se coloque en un color mas bajo, en gris o algo parecido.
Alguna idea??. se lo agradecería bastante
Salu2
Responder Con Cita
  #2  
Antiguo 31-01-2006
piccolo2101 piccolo2101 is offline
Miembro
 
Registrado: oct 2005
Posts: 63
Poder: 19
piccolo2101 Va por buen camino
Hola,

te contaré una forma chabacana de hacerlo que seguramente no sea ni la mejor ni la más correcta pero que funcionaría. La idea es crear un panel por encima de todos tus formularios que no sea visible y estableces un color gris y un valor de transparencia de forma que aunque se vea gris deje ver lo que hay detrás que será tu formulario. Para hacer una transicion suave puedes usar animateWindow de la siguiente forma:
Código Delphi [-]
   // Para que desaparezca el velo gris
   AnimateWindow(Self.Handle, 500, AW_HIDE or AW_BLEND);
   // Para que aparezca
   AnimateWindow(Self.Handle, 500, AW_SLIDE or AW_BLEND);

Además haz que el form pase a enable para que no se pueda activar ni presionar botones.

Esper que te haya servido de algo aunque no sé si es lo que buscas.

Un saludo.
Responder Con Cita
  #3  
Antiguo 31-01-2006
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Código Delphi [-]
  Color := clBtnShadow;
  try
    FormX.ShowModal ....
  finally
    Color := clBtnFace;
  end;

¿Algo así?
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #4  
Antiguo 01-02-2006
pepe2000 pepe2000 is offline
Miembro
 
Registrado: dic 2003
Ubicación: Cajamarca
Posts: 93
Poder: 21
pepe2000 Va por buen camino
gracias a los dos por su respuesta.
sinembargo, piccolo tu solucion solamente pude ser posible dentro del mismo formulario, ya que cuando se crea un panel, este pertenece al form actual y lo que yo intento es poner en gris toda la parte exterior a mi nuevo formulario abierto con showmodal (me refiero a los controles, los iconos, las ventas, y todo objeto que exita exteriormente a mi form.

Gracias tambien Delphi.com.ar, pero tu solucion hace referencia solamente a mi formulario activado como showmodal, pero lo de atras siempre queda con sus colores originales

De veras, este es un buen problema para aquellos que quieren ver "a oscuras" todo lo que queda debajo del form actual.

Gracias, de todas formas y Espero sus sugerencias.
Responder Con Cita
  #5  
Antiguo 01-02-2006
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cita:
Empezado por pepe2000
Gracias tambien Delphi.com.ar, pero tu solucion hace referencia solamente a mi formulario activado como showmodal, pero lo de atras siempre queda con sus colores originales
¿a que te referís con "mi formulario activado como showmodal, pero lo de atras siempre queda con sus colores originales"?

Creo que la solución de delphi.com.ar hace de buena manera lo que pedías al inicio, e indudablemente la de piccolo, sabiendola tomar, también funcionaría, con el añadido de poner en gris no solo el fondo del formulario, sino todos los controles contenidos en ellos, y el inconveniente de poner en gris cualquier área cubierta por el panel aunque no sea parte de tu aplicación.

Saludos.
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #6  
Antiguo 01-02-2006
pepe2000 pepe2000 is offline
Miembro
 
Registrado: dic 2003
Ubicación: Cajamarca
Posts: 93
Poder: 21
pepe2000 Va por buen camino
Cool No estaba muy claro

Gracias por contestar, pero creo que no he sido muy explicito para el problema que tengo. Porque ahora veo que ustedes creen que mi necesidad es poner en gris el fondo del formulario y en realidad lo que quiero es que el formulario que haga una sombra sobre el screen (obviamente esa sombra se ve cuando el formulario no está maximizado).
Espero que me entiendan.
Salu2
Responder Con Cita
  #7  
Antiguo 01-02-2006
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Es justamente lo que te esta proponiendo Delphi.com.ar, no controlado desde el formulario que se muestra modal, sino desde el que lo llama, pero el efecto es el que buscas, ¿no?
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #8  
Antiguo 01-02-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
Me da la impresión de que en realidad él busca algo como lo que gluglu hace aquí

// Saludos
Responder Con Cita
  #9  
Antiguo 03-02-2006
pepe2000 pepe2000 is offline
Miembro
 
Registrado: dic 2003
Ubicación: Cajamarca
Posts: 93
Poder: 21
pepe2000 Va por buen camino
Muy bien roman, has captado la idea, y he probado con lo que expica gluglu pero esto sirve solamente para hacer una pequeña sombra y lo que intento es hacer una GRAN Sombra Poniendo en gris la parte de atrás del formulario.

Creo que seguiré investigando y les cuento como me va...
Gracias.
Responder Con Cita
  #10  
Antiguo 05-02-2006
pepe2000 pepe2000 is offline
Miembro
 
Registrado: dic 2003
Ubicación: Cajamarca
Posts: 93
Poder: 21
pepe2000 Va por buen camino
mas o menos asi...

cuando se coloca cerrar sesion en Windows XP y nos demoramos en cerrar la sesion; o cuando cambiamos la apariencia de Windows XP a plateado u Olivo, aparece un formulario con el msg: "ESPERE", pero lo que queda por detrás se convierte maravillosamente en un color gris (pruebenlo!)
Excelente efecto de windows que quiero reproducir (ya que siempre utilizo showmodal). Alguien a intentado algo como esto?

Un Gran saludos Foristas incanzables.
PP2K
Responder Con Cita
  #11  
Antiguo 05-02-2006
pepe2000 pepe2000 is offline
Miembro
 
Registrado: dic 2003
Ubicación: Cajamarca
Posts: 93
Poder: 21
pepe2000 Va por buen camino
Creo que esto se puede lograr creando un hilo que vaya cambiando el color del fondo mientras está activo el formulario modal, pero como soy nuevo en delphi no entiendo mucho como pueda hacerse.
Sugerencias?
Responder Con Cita
  #12  
Antiguo 06-02-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por pepe2000
cuando se coloca cerrar sesion en Windows XP y nos demoramos en cerrar la sesion; o cuando cambiamos la apariencia de Windows XP a plateado u Olivo, aparece un formulario con el msg: "ESPERE", pero lo que queda por detrás se convierte maravillosamente en un color gris (pruebenlo!)
Excelente efecto de windows que quiero reproducir (ya que siempre utilizo showmodal). Alguien a intentado algo como esto?
Le he estado dando vueltas al asunto y no parece muy sencillo, o al menos a mí no se me ocurre algo que me lo parezca. Verás. Creo que Windows utiliza un pequeño "truco" para lograr el efecto que dices. Este consiste en realizar una captura de pantalla del escritorio en el momento de ejecutar, por ejemplo, el diálogo para apagar, reiniciar, cerrar sesión, etc.

Es decir, Windows captura la pantalla justo antes de mostrar el diálogo y a continuación juega con esa imagen que acaba de capturar. De una manera más o menos sencilla puede conseguirse, por ejemplo, capturando la pantalla en una variable "TBitmap". A continuación asignamos dicho "Bitmap" (con la captura) en una variable de tipo "TJPEGImage", de tal modo que podamos utilizar la propiedad "Grayscale" de esta última variable.

Si luego volvemos a cargar la imagen contenida en la variable "Jpg" en la variable de tipo "TBitmap" podremos copiar esta imagen en el propio escritorio, consiguendo que este se vea "gris". Creo que si echas un vistazo o pruebas el siguiente código fuente podrás comprobar por ti mismo lo que digo o trato de decir:

Código Delphi [-]
uses
  Jpeg;

procedure CosaRaraDeDomingoNoche;
var
  altoPantalla,
  anchoPantalla: integer;
  bitmapTemp: TBitmap;
  jpgTemp: TJPEGImage;
  archivoTemp,
  directorioTemp: array[0..MAX_PATH] of char;
begin
  anchoPantalla := Screen.Width;
  altoPantalla := Screen.Height;
  bitmapTemp := TBitmap.Create;
  jpgTemp := TJPEGImage.Create;
  GetTempPath(SizeOf(directorioTemp), directorioTemp);
  GetTempFileName(directorioTemp, nil, 0, archivoTemp);
  try
    bitmapTemp.Width := anchoPantalla;
    bitmapTemp.Height := altoPantalla;
    BitBlt(bitmapTemp.Canvas.Handle, 0, 0,
      anchoPantalla, altoPantalla, GetDC(0), 0, 0, SRCCOPY);
    jpgTemp.Grayscale := true;
    jpgTemp.Assign(bitmapTemp);
    jpgTemp.SaveToFile(archivoTemp);
    FreeAndNil(jpgTemp);
    FreeAndNil(bitmapTemp);
    bitmapTemp := TBitmap.Create;
    jpgTemp := TJPEGImage.Create;
    jpgTemp.LoadFromFile(archivoTemp);
    bitmapTemp.Assign(jpgTemp);
    BitBlt(GetDC(0), 0, 0, anchoPantalla, altoPantalla,
      bitmapTemp.Canvas.Handle, 0, 0, SRCCOPY);
  finally
    jpgTemp.Free;
    bitmapTemp.Free;
    DeleteFile(archivoTemp);
  end;
end;

procedure TfrmSecundario.FormCreate(Sender: TObject);
begin
  CosaRaraDeDomingoNoche;
end;
Sin embargo, como podrás comprobar, existen problemas: no pocos problemas, derivados de que el escritorio sigue "activo", con lo cual la imagen en blanco y negro no se mantiene, o se mantiene "a trozos". En definitiva, yo no he sabido hacerlo mejor de este modo. O ya me cansé de intentarlo, por lo que luego diré.

El caso es que creo que Windows va un poco más allá con el truco de marras. Verás. Aun mejorando muchísimo lo que he expuesto más arriba, tu aplicación podrá moverse por la pantalla, cosa que "borraría" la imagen en blanco y negro que acabábamos de copiar en el escritorio.

Si te fijas en Windows, al menos en su versión XP, el diálogo para apagar, reiniciar, cerrar sesión, etc., no puede moverse... es posible que para evitar lo que he dicho más arriba. Sin embargo, he dicho también que parece que Windows va un poco más allá. ¿En qué sentido?

Pues en que una posible solución a nuestro problema sería no pintar la imagen en blanco y negro en el escritorio "activo", sino en otro escritorio, en uno que podemos crear nosotros mismos. He seguido unos pasos iniciados por Román en estos mismos Foros para crear escritorios y ejecutar aplicaciones en dichos escritorios creados por nosotros mismos.

El problema que me he encontrado es que para que lo anterior funcione se necesitarían dos aplicaciones. Una que crearía un nuevo escritorio y que además ejecutaría una segunda aplicación ya dentro de ese nuevo escritorio. De ese modo en dicho escritorio solamente aparecería una aplicación: la tuya.

Creo que Windows consigue el efecto de ese modo. Esto es, si no estoy equivocado (aunque me temo que sí, porque además debe haber formas más elegantes de conseguir lo que te propones sin recurrir al lío que estoy tratando de explicar más o menos, por si te atreves con ello), digo que, si no estoy equivocado, el diálogo que sirve en Windows XP para reiniciar, apagar, cerrar la sesión, etc., es en realidad un programa, que se ejecuta en un escritorio creado para él.

Esto último lo he comprobado por mí mismo y funciona más o menos bien. Lo que no me convence es que sean dos las aplicaciones necesarias. Esto es, creo que ha de haber alguna forma de hacer que una aplicación pase de ejecutarse en un escritorio a ejecutarse en otro, precisamente, creado desde esta misma aplicación.

Pero, de todos modos, creo que todo esto es demasiado para lo que pretendes conseguir, o me lo parece a mí. Quiere decirse que tal vez no merezca la pena plantearse algo así, si no es por un motivo importante o que al menos lo parezca, nos sé, no porque nos apetezca, porque ya ves que requiere de cierto tinglado que puede no merecer la pena.

También estoy pensando ahora que si se quiere... es cuestión de ponerse a ello. Bueno. Por mi parte adjunto el código fuente de dos aplicaciones que, basándose en código fuente escrito por Román en estos Foros, logran, al menos en parte, el efecto que te llama la atención y quisieras utilizar. Huelga decir que todo lo he hecho rápidamente y con cierta desgana (sobre todo a lo último), así que, te pido disculpas por no comentar en absoluto el código fuente y eso.

Disculpas también por el rollo que acabo de soltar.
Archivos Adjuntos
Tipo de Archivo: zip quecosa.zip (5,7 KB, 48 visitas)
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #13  
Antiguo 06-02-2006
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos

Esta pagina hace "casi" lo mismo al querer cerrra sesion (solo en IE).

No aporto nada, pero es curioso
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #14  
Antiguo 07-02-2006
pepe2000 pepe2000 is offline
Miembro
 
Registrado: dic 2003
Ubicación: Cajamarca
Posts: 93
Poder: 21
pepe2000 Va por buen camino
ok. muchas gracias
Os cuento como estoy resolviendo el problema.
- tengo un formulario principal donde estan los botones que dan origen (como showmodal) a diferentes formularios (ventas, compras, catalogo productos, etc).
- Este formulario principal esta maximizado y siempre lo conservo así, porque incluso tiene un papel tapiz.
- Considerando la sugerencia que propone DEC de crear un nuevo desktop, he preferido crear un formulario (tambien maximizado) que lleva la imagen gris de mi formulario principal y sobre esa ventana abro (showmodal) el form que deseo.
- He conseguido, por lo tanto, una imagen del fondo en gris y sobre esto mi ventana de ingreso de datos.
- Todo bien, pero windows tiene que crear, activar, coger la imagen y ponerla en gris, para luego abrir mi ventana de datos. sinembargo sucede un parpadeo.
- No sé si alguien puede ayudarme para evitar ese parpadeo.
Salu2
Responder Con Cita
  #15  
Antiguo 07-02-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
Cita:
Empezado por vtdeleon
Esta pagina hace "casi" lo mismo al querer cerrra sesion (solo en IE).

No aporto nada, pero es curioso
Ese casi hace la diferencia pues una cosa es sombrear todo el escritorio y otra lo que pertenece a nuestra aplicación, como es el caso de los foros. La verdad todo este hilo ha estado muy mal planteado desde el principio pues hasta el momento siguen sin quedar claro qué es lo que quiere.

Si quiere pintar de gris todo el escritorio, pues como ya indicó David, la tiene difícil, sin contar con que, aún lográndolo, es ilógico: hay muchas aplicaciones que elusaurio puede ejecutar simultáneamente y no querrá que se las oscurezcan.

Si lo que se quiere es poner en gris las ventanas de la aplicación que se inactivan al mostrar modalmente otra, pues se puede lograr con cierto trabajo. En algún hilo lo puse pero no lo encuentro. Básicamente era cuestión de "fotografiar" el formulario que queda inactivo, pasar la imagen a escala de grises y utilizar el evento OnPaint de dicho formulario inactivo para dibujar el falso en lugar del real.

¿Alguien alguna vez ha visto la parte de atrás de un formulario?

// Saludos
Responder Con Cita
  #16  
Antiguo 08-02-2006
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos
Cita:
Empezado por roman
¿Alguien alguna vez ha visto la parte de atrás de un formulario?
Yo si ==>Looking Glass (Quien pueda...) Video
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #17  
Antiguo 03-05-2006
Avatar de Cabanyaler
Cabanyaler Cabanyaler is offline
Miembro
 
Registrado: jun 2003
Ubicación: País Valencià
Posts: 339
Poder: 21
Cabanyaler Va por buen camino
Red face

Supongo que ahora ya es demasiado tarde, pero bueno....

Creo que o que queria el compañero es hacer una similitud a como se queda la pantalla cuando vas a cerrar el WXP, es decir, el fondo se queda en blanco y negro y la pantalla de Cerrar en color. De este modo se queda de una forma muy gráfica que el form único accesible es el de color.

Yo lo más parecido que he hecho es lo que contiene este hilo:
http://www.clubdelphi.com/foros/showthread.php?t=16341

Pero querría modificarlo para en lugar d eponerlo semitransparente se quede en blanco y negro.

¿Alguien lo consiguió?.

Gracias por todo.

__________________
El meu país és tan petit, que des de dalt d'un campanar es pot veure el campanar veí.
Responder Con Cita
  #18  
Antiguo 21-12-2008
cascarrabias cascarrabias is offline
Miembro
 
Registrado: abr 2006
Posts: 103
Poder: 19
cascarrabias Va por buen camino
Al parecer este es un post muy viejo, pero para que no se quede inconcluso el tema y por si a alguien le sirve, aqui les dejo un ejemplo rapido de lo que creo era lo que queria hacer pepe2000

Salu2
Archivos Adjuntos
Tipo de Archivo: zip temp.zip (14,1 KB, 57 visitas)

Última edición por cascarrabias fecha: 21-12-2008 a las 03:55:42.
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
Al cerrar Form no entra en OnClose nowheremanza OOP 2 13-09-2005 14:04:41
Poner color background del form cuando pierde el foco Cabanyaler Gráficos 4 25-11-2004 08:32:03
Impedir mover el form y redimensionar al mover barra tareas jealousy API de Windows 0 15-06-2004 12:58:05
Poner un fondo en el form hook Gráficos 2 13-05-2004 18:14:35
como puedo poner form hijos ronimaxh Varios 5 22-10-2003 22:55:23


La franja horaria es GMT +2. Ahora son las 09:11:43.


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