Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Form padre, hijos y alphablendvalue (https://www.clubdelphi.com/foros/showthread.php?t=82464)

cesarsoftware 09-03-2013 10:19:30

Form padre, hijos y alphablendvalue
 
Hola compañeros.

Siguiendo el consejo de casimiro, abro este nuevo hilo.

Necesito que el formulario principal (o la imagen que contiene alineada al client, un plano topografico, por ejemplo) no sea trasparente pero los formularios hijo si.
Sobre ese plano dibujo una casitas que muestran la actividad remota, ahora esas casitas (formularios creados en tiempo de ejecucion) no son trasparentes y tapan el plano, si son muchas, el plano del fondo ni se ve y ademas la casita se puede agrandar (tiene 2 tamaños en funcion de la cantidad de informacion a mostar).
Si creo el form hijo y le asigno el parent del formulario padre, las casitas se mueven con el plano pero cojen la propiedad alphablendvalue del padre, osea o todos trasparentes o todos opacos.
Si creo el form hijo y no le asigno el parent del formulario padre, las casitas se quedan en la posicion de la pantalla (que es el parent) donde estan y el plano se va solo, eso si, las casitas son trasparentes.

ejemplo del codigo
Código Delphi [-]
  // inicializa objetos
  Forma := TForm.Create(FormularioPadre);
  Forma.Parent := FormularioPadre;//se mueve con el padre pero no es trasparente
  // si no asigno y el formulario padre es la pantalla, son trasparentes pero no se mueven dentro del padre
  Forma.Position := poDesigned;
  Forma.Left := Left;
  Forma.Top := Top;
  if Icono = False then
  begin
    Forma.Width := 206;
    Forma.Height := 256;
  end
  else
  begin
    Forma.Width := 26;
    Forma.Height := 26;
  end;
  Forma.Color := clHotLight;
  Forma.Visible := Visible;
  Forma.BorderStyle := bsNone;
  Forma.AlphaBlend := True;
  Forma.AlphaBlendValue := 115;
  Forma.ShowHint := True;
  Forma.Hint := 'Left-Click y arrastre para mover';
  Forma.OnMouseDown := LedOnMouseDown;
  Forma.OnMouseMove := LedOnMouseMove;
  Forma.OnMouseUp := LedOnMouseUp;
  CBmodelo := TComboBox.Create(Forma);
  CBmodelo.Parent := Forma;
  CBmodelo.Top := 10;
  ...
  LedOn := TShape.Create(Forma);
  LedOn.Parent := Forma;
  LedOn.Shape := stCircle;
  ...

¿Alguna sugerencia (de escafandra, por ejemplo;)?

Gracias aunque sea por leer.

ricardopl65 10-03-2013 21:15:29

prueba esto
 
he estado haciendo unas pruebas y he sacado algo como esto.
Subo un proyecto hecho en XE2 , para otras versiones igual tienes que cambiar algun uses.

Lo he subido al FTP carpeta delphi/ejemplos/varios/mditrans.zip
porque no me deja subirlo de ningua otra manera

Casimiro Notevi 10-03-2013 21:24:20

Crea el .zip sin el ejecutable, deja sólo el código fuente y súbelo con la opción "archivos adjuntos", así no ocupará casi nada.

ricardopl65 10-03-2013 21:31:10

ya lo he intentado
 
Ya lo he intentado pero me dice exceso de cuota.
Y cuando intento ver mis adjuntos me dice:

Tú has sido excluido por las siguientes razones:
No reason was specified.
Fecha en que será levantada tu exclusión: Nunca

Lo he subido con ejecutable por si tenia problemas para compilarlo debido a las versiones de delphi

Casimiro Notevi 10-03-2013 21:33:59

Por eso te comento, que lo intentes sin el ejecutable, a ver si así puedes subirlo, no recuerdo cuánto es lo que puedes subir.

ecfisa 10-03-2013 21:39:30

Cita:

Empezado por ricardopl65 (Mensaje 456363)
he estado haciendo unas pruebas y he sacado algo como esto.
Subo un proyecto hecho en XE2 , para otras versiones igual tienes que cambiar algun uses.

Lo he subido al FTP carpeta delphi/ejemplos/varios/mditrans.zip
porque no me deja subirlo de ningua otra manera

Hola Ricardo.

Busque el archivo "mditrans.zip" en la carpeta Delphi (y subcarpetas) del FTP y no pude encontrarlo, ¿ Tampoco te permitió subirlo allí ?

Quita el ejecutable, avisanos si continuas teniendo inconvenientes y vemos como solucionarlo.

Saludos.

ricardopl65 10-03-2013 21:40:18

edito, subido sin ejecutable y tambien he quitado la propiedad picture del timage, que era lo que hacia grande el .dfm
por lo tanto deberas asignar un bitmap pequeño al timage

ricardopl65 10-03-2013 21:43:14

Cita:

Empezado por ecfisa (Mensaje 456368)
Hola Ricardo.

Busque el archivo "mditrans.zip" en la carpeta Delphi (y subcarpetas) del FTP y no pude encontrarlo, ¿ Tampoco te permitió subirlo allí ?

Quita el ejecutable, avisanos si continuas teniendo inconvenientes y vemos como solucionarlo.

Saludos.

Lo subí pero desapareció , lo he vuelto a subir sin ejecutable, pero ya lo podeis quitar puesto que lo he podido poner como adjunto

cesarsoftware 11-03-2013 10:31:17

Gracias por tu aporte ricardo,
A ver si a lo largo de la mañana le hecho un vistazo y os cuento.

cesarsoftware 11-03-2013 13:49:13

Ya lo he probado y esta muy bien la jugada ricardo, gracias, pero esta solucion tiene 2 incovenientes, uno es que es totalmente trasparente y no "semitrasparente" como con alphabledvalue y el efecto visual cambia mucho ya que la "casita" original tiene un tono azulado.
La otra es semisolucionable, ya que al ser la forma trasparente no puedo moverla arrastando con el raton y tendria que asignar eventos a cada control de la forma pero no podria moverla pichando "en los huecos" de la forma que es lo que el usuario va a hacer.

¿Que?, ¿Se puede hacer un alphablend sin eredar la propiedad del padre?

Thanks.

ricardopl65 11-03-2013 14:42:39

una imagen de las casitas
 
la forma es transparente excepto el imagedit que contiene la casita, yo no le he puesto imagen por no engordar el zip.
aqui pongo una grabacion bastante mala en mp4 de como me funciona a mi.
http://www.ricardoplaza.com/download/recorder.mp4
O igual es que no entiendo bien tu pregunta:D

cesarsoftware 11-03-2013 16:11:19

Jopelines ricardo ^\||/, los has hecho muy bien entendiendo los formularios como casitas, (que asi lo he explicado yo), ahi podrias poner sobre o alrededor de las casitas la informacion relevante, conectada, desconectada, etc.

Yo no se hacer mp4 (¿podrias decirme como?) pero esta tarde cuando vuelva a las 17:00, preparo una fotos de la aplicacion real y las publico para poder explicarme mejor, por cierto, no hay casitas:D, son máquinas, jejeje.

Muchas gracias por tu colaboracion, a ver si entre todos damos con la solucion.

ricardopl65 11-03-2013 16:40:48

1 Archivos Adjunto(s)
he grabado la imagen con ScreenRecorder y pasado a mp4 con Any Video Converter.
Es que me lo tomo como un reto personal.
Mira aun mas facil usando parte del codigo del ejemplo 29 de Seoane.
Solo el formulario padre de tipo fsNormal;

haciuendo doble clic sobre cada imagen se borra;

cesarsoftware 11-03-2013 18:42:57

Buenas, ya estoy aqui, e instalado el camrecorder (gracias) y en puesto en youtube el video que muestra los efectos
http://www.youtube.com/watch?v=LTPEj...ature=youtu.be
Como verás entre una imagen preciosa de un paisaje o un plano topografico o de planta el efecto visual cambia mucho, la aplicación funciona bien, pero si los formularios que contienen los objetos de datos fueran semitrasparentes pues como que mucho mejor;)

Habia pensado en dejarlos fuera del formulario padre y detectar el evento de movimiento de ventana (que no lo he buscado, supongo que existe) o el de raton onmousemove como ya hago y mover las ventanas hijas a la vez que se mueve el padre.
Pero estaba seguro de que me saldrias con que se puede crear una clase derivada de TForm y hacer que pudieran tener valores de alphablend distintos, aunque como veo que teneis controlado el tema de la imagen, a lo peor no se puede hacer lo que me gustaria (yo de derivar clases y eso, como que controlo poco).

Seguire investigando, pero me gustaria saber como sale de esta ricardo, jejeje:D

ricardopl65 11-03-2013 21:40:33

Lo más que consigo es esto
 
1 Archivos Adjunto(s)
No se si te servirá pero esto es de momento lo que mas se acerca.
Son ventanas MDI por lo tanto se mueven con el padre.


Chris 12-03-2013 00:56:48

Una ventana que esté dentro de otra no puede tener el estilo "WS_EX_LAYERED", que es lo que necesitas. Entonces lo que necesitas hacer es crear para cada "casita" dos ventanas, o una sola dependiendo del estilo que buscas. Un ejemplo que codifiqué hace un tiempo:


En realidad allí utilizo dos ventanas. La grafica de Ballon en realidad es una sola ventana. Esta es una ventana de capa (WS_EX_LAYERED Window). El problema con la ventana de capas, es que no soportan interacción gráfica. Fueron inventadas con el próposito de hacer los viejos splash screen y cosas similares. Entonces utilizo una segunda ventana para albergar la interfaz (controles y labels) del formulario. Para mover conjuntamente los dos formularios manejo el evento WM_WINDOWPOSCHANGING en uno de ellos.

La otra posibilidad es hacer algo más o menos parecido a lo que tienes. En este caso creo que sólo tendrás que manejar el evento WM_WINDOWPOSCHANGING en el formulario padre y conforme mover a los hijos. Pero para conseguir el efecto de transparencia es importante que el formulario hijo NO SEA MDI-Child.

Saludos!

cesarsoftware 12-03-2013 13:17:25

Gracias cris, voy a ver si me sale.

Thanks

ricardopl65 12-03-2013 13:45:21

el problema de los MDI es que no soportan alphablend. O son transparentes (como en ultimo ejemplo que te puse ) o no lo son.
Una pregunta que se me ocurre ¿ es imprescindible que sean formularios?

cesarsoftware 12-03-2013 13:51:38

Hola ricardo,

Pues no, no es imprescindible que sean formularios, de hecho inicialmente eran paneles y como vi que me tapaban el plano, pense en el alphablend del formulario.

¿Que se te ha ocurrido?

ricardopl65 12-03-2013 15:22:07

estoy en ello de momento mirate este video a ver si se acerca a lo que quieres
http://www.ricardoplaza.com/download/ventanatrans.mp4


La franja horaria es GMT +2. Ahora son las 04:09:38.

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