PDA

Ver la Versión Completa : Pregunta muy tonta


Fossy
06-10-2012, 14:23:07
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
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
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
...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:

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.