Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Pregunta muy tonta (https://www.clubdelphi.com/foros/showthread.php?t=81065)

Fossy 06-10-2012 14:23:07

Pregunta muy tonta
 
Hola amigos:

Tras años programando acabo de encontrarme algo de lo mas tonto del mundo a lo que no le doy solución ni soy capaz de encontrar nada en google...

Es tan simple como querer poner un Timage (png transparente) encima de un Tpanel, y el Tpanel asociarlo a un TMediaPlayer...

Cuando el Mediaplayer empieza a reproducir el vídeo, el Timage desaparece y no tengo forma humana de ponerlo para que se vea encima. Me da igual si el Timage está dentro del Tpanel o es un objeto de TForm en primer plano..., ya he intentado todas las combinaciones y en el IDE se pone por delante, todo parece genial, pero cuando empieza el vídeo el TPanel ignora todo lo que esté por encima.

¿Alguna solución?.

Gracias!!.

Casimiro Notevi 06-10-2012 16:08:27

No entiendo bien "la figura", un tmediaplayer sobre un timage. Y el timage está en un panel.
Cuando se reproduce algo en el mediaplayer la imagen desaparece, supongo que es normal puesto que el mediaplayer está encima, ¿no?.
Puede que no lo haya entendido.

Fossy 07-10-2012 03:03:54

A ver, lo explico de nuevo y doy otros datos para que me entendáis mejor...

Tengo que poner a reproducir un vídeo en pantalla, me da igual si es con mediaplayer, videograbber o lo que sea (ya he probado con unos cuantos), NO es a pantalla completa, sino en una pequeña porción a modo de "vista previa". Hasta aquí bien, cogemos un TMediaPlayer y un TPanel, el primero es el componente y el segundo la ventana de reproducción (por eso decía lo del TPanel).

Bueno, ya tenemos nuestro vídeo funcionando..., ahora quiero que el usuario vea "faldones" publicitarios a pié de vídeo, ¿cómo lo hago?..., en teoría parece fácil, pues inserto un TImage encima del TPanel y ya está ¿no?..., pues NO!!..., en el IDE se puede poner perfectamente encima, o manejarlo por capas con el "bring to front" y "send to back"..., no hay ningún problema, el problema es que lo pongas como lo pongas, cuando el vídeo se reproduce, todo lo demás es ignorado!!, da igual que pongas encima un TImage o un Label para poner texto..., no hay forma humana de que puedas poner nada encima del vídeo cuando está en reproducción.

He probado de mil maneras distintas.

Si alguien logra poner un reproductor, y encima del vídeo colocar aunque sea un simple Label para poner texto, por favor que me de un poco de auxilio :).

Gracias amigos!!.

Delphius 07-10-2012 08:26:08

Cita:

Empezado por Fossy (Mensaje 446555)
A ver, lo explico de nuevo y doy otros datos para que me entendáis mejor...

Tengo que poner a reproducir un vídeo en pantalla, me da igual si es con mediaplayer, videograbber o lo que sea (ya he probado con unos cuantos), NO es a pantalla completa, sino en una pequeña porción a modo de "vista previa". Hasta aquí bien, cogemos un TMediaPlayer y un TPanel, el primero es el componente y el segundo la ventana de reproducción (por eso decía lo del TPanel).

Bueno, ya tenemos nuestro vídeo funcionando..., ahora quiero que el usuario vea "faldones" publicitarios a pié de vídeo, ¿cómo lo hago?..., en teoría parece fácil, pues inserto un TImage encima del TPanel y ya está ¿no?..., pues NO!!..., en el IDE se puede poner perfectamente encima, o manejarlo por capas con el "bring to front" y "send to back"..., no hay ningún problema, el problema es que lo pongas como lo pongas, cuando el vídeo se reproduce, todo lo demás es ignorado!!, da igual que pongas encima un TImage o un Label para poner texto..., no hay forma humana de que puedas poner nada encima del vídeo cuando está en reproducción.

He probado de mil maneras distintas.

Si alguien logra poner un reproductor, y encima del vídeo colocar aunque sea un simple Label para poner texto, por favor que me de un poco de auxilio :).

Gracias amigos!!.

Es que eso ya es cosa de como es y fue pensado el funcionamiento del TMediaPlayer, y posiblemente también entre en juego en como interpreta el SO el "redibujado".
No es algo que se pueda solucionar tan simple con un "enviar atrás/adelante"... es una mezcla de diseño de componentes en juego, junto con el SO.

Salvo que exista alguna manera de "capturar" el fotrograma del video, y poder "sumar" la imagen que tu deseas poner a modo de aviso como para generar la imagen a mostrar. Asi como lo pides, no hay algo simple... quizá y sólo quizá existe un componente que extienda la capacidad del TMediaPlayer y haga lo que buscas.
De última no te queda otra que esquivar el problema. En ves de intentar mostrar el aviso sobre el video, muéstralo debajo de éste... o al costado.

Saludos,

Casimiro Notevi 07-10-2012 10:58:18

Cita:

Empezado por Delphius (Mensaje 446564)
En ves de intentar mostrar el aviso sobre el video, muéstralo debajo de éste... o al costado.

Y asunto solucionado :)

escafandra 07-10-2012 19:33:47

Cita:

Empezado por Delphius (Mensaje 446564)
...posiblemente también entre en juego en como interpreta el SO el "redibujado".
No es algo que se pueda solucionar tan simple con un "enviar atrás/adelante"...

Delphius tiene razón. Cualquier ventana con estilo WS_CHILD en nuestro formulario será "Borrada" al superponerse con el vídeo del Panel pero si usamos una ventana sin ese estilo no tendrá ese comportamiento.

1.- Lo mas sencillo es crear un Form nuevo con BorderStyle = bsNone.
2.- Después colocamos un TImage, un TImageList y un Timer. La imagen cambiará a cada golpe de Timer cargándola del TImageList.
3.- Hacemos Form2.Parent:= Form1 siendo Form1 el que tiene el TMediaPlayer.
4.- Ajustamos la posición de Form2
5.- Cuando nos interese hacemos Form2.Show

Form2 se superpondrá encima del vídeo y mostrará las imágenes publicitarias a cada golpe de Timer.


Saludos.

escafandra 08-10-2012 00:15:59

Pero si sigues queriendo un TPanel para mostrar tus imágenes también tiene solución.

1.- Diseña tus panels para el TMediaPlayer y otro para las imágenes publicitarias.
2.- En el evento OnCreate de tu formulario pon este código:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
   SetWindowLong(Panel2.Handle, GWL_STYLE, WS_POPUP);
   Panel2.Parent:= self;
end;
3.- El resto será un Timer y un TImageList para ir mostrando las imágenes publicitarias.


Saludos.


La franja horaria es GMT +2. Ahora son las 16:57: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