Page 1 of 1

Ayuda sobre TVIDEO y DIALOGS

PostPosted: Tue Feb 02, 2010 2:47 pm
by jll-fwh
Hola a todos:

Antes de nada, como depende de cada version de FWH/Harbour comento que estoy usando las siguientes versiones:

FWH/FWHX 8.12
HARBOUR 1.0.1 Rev 9361
BORLAND C++ 5.5.1

El problema es el siguiente:

Estoy añadiendo un modulo a un programa para almacenar una tabla de temas multimedia, y no logro que funcione perfectamente el iniciar un VIDEO ( AVI/MPG ) cuando se activa un Dialog. He probado tanto con TVIDEO de FW como la clase modificada por TheFull, pero nada, no hay forma.

En el codigo fuente que abajo adjunto, con la clase TVIDEO modificada por TheFull, en algunas veces arranca el video bien al inicar el dialogo, pero en las siguientes llamadas a la funcion, hay que mover el dialogo para que se pueda ver, sino mueves la ventana se oye pero no se ve.

He intentado tambien poner en ON INIT el metodo Move() para mover la ventana y incluso Move() para el objeto oVideo, pero unas veces funciona y otras NO. SINO MUEVES LA VENTANA, NADA.

Le ha pasado a alguien este caso?

Existe alguna forma de saber si un archivo se ha cargado ya en el control? de esta manera podria probar en añadir Move() al cargar el recurso a ver si asi funciona bien.

En este ejemplo tambien hay un BUG, cuando pulsan la tecla ESC y muestra el mensaje para saber si quieren salir del Dialogo, el video ya no se ve otra vez, a no se que hagas click sobre el objeto TVIDEO para ponerlo a pantalla completa, pero apartir de aqui, dentro del recuerso no se ve.

Este es el ejemplo:

Si alguien lo prueba, hay que compilar con la clase TVIDEO de Rafa carmona ( Thefull ).


/*------------------------------------------------------------------------------*/
Function VideosB( cFile, cTitle )
/*------------------------------------------------------------------------------*/

LOCAL oDlg, oVideo

DEFINE DIALOG oDlg TITLE cTitle FROM 1,1 TO 300,580 PIXEL

oDlg:lHelpIcon := .F.

@ -10, -10 VIDEO oVideo FILE cFile;
SIZE oDlg:nBottom, oDlg:nRight OF oDlg ADJUST

oVideo:bRClicKed := { || NIL }
oVideo:bLClicKed := { || oVideo:Stop(),;
oVideo:FullScreen(.T.),;
oVideo:Play() }

ACTIVATE DIALOG oDlg;
ON INIT ( oVideo:oMci := TMci():New( "MPEGVideo!", cFile, oVideo ),;
oVideo:oMci:lOpen( cFile,,oVideo ),;
oVideo:Play() ,;
oVideo:SetFocus(),;
oDlg:Center() );
VALID ( Salir( oDlg, oVideo ) )

oVideo:End()
DeleteObject( oVideo )

Return NIL
/*------------------------------------------------------------------------------*/
STATIC Function Salir( oDlg, oVideo )
/*------------------------------------------------------------------------------*/

If MsgYesNo( "¿ Desea cancelar la Reproducción ?",;
OemToAnsi( "Confirmar" ) )
Return( .T. )

End

Un saludo y gracias de antemano:
JLL
http://www.proyectos-meliana.es

Re: Ayuda sobre TVIDEO y DIALOGS

PostPosted: Wed Feb 03, 2010 10:18 am
by Antonio Linares
JLL,

Antes que nada, bienvenido a estos foros.

Puedes copiar aqui el código de la Clase TVideo de Rafa que estás usando ?

Tambien si pudieses proporcionar un enlace a uno de los videos que estés usando, ayudaría para probarlo. Gracias,

Re: Ayuda sobre TVIDEO y DIALOGS

PostPosted: Wed Feb 03, 2010 8:39 pm
by jll-fwh
Hola Antonio:

Despues de un monton de horas, al final he decidido usar ActiveX, que es una pasada. Aunque he tenido problemas porque queria insertar el actvieX en un dialogo en vez de una ventana, al final como siempre en ON INIT funciona, pero si tengo un problema porque no me deja manipular ni las propiedades ni los metodos de ningun modo una vez cargado.

Aqui te dejo el codigo a ver si me puedes decir como hacer oActiveX:DO( "CLOSE" ) cuando cierre el DIALOG.

/*------------------------------------------------------------------------------*/
STATIC Function MostrarWMP( cFile, cTitle )
/*------------------------------------------------------------------------------*/

   LOCAL oDlg, oActiveX

   DEFINE DIALOG oDlg TITLE cTitle FROM 1,1 TO 300,580 PIXEL

      oDlg:lHelpIcon := .F.

   ACTIVATE DIALOG oDlg CENTERED;
            ON INIT ActivaVIDEO( oDlg, oActiveX, cFile );
            VALID ( .T. )

   DeleteObject( oActiveX )

Return NIL
/*------------------------------------------------------------------------------*/
STATIC Function ActivaVIDEO( oDlg, oActiveX, cFile )
/*------------------------------------------------------------------------------*/

   oActiveX = TActiveX():New( oDlg, "MediaPlayer.MediaPlayer.1",;
                              oDlg:nTop, oDlg:nLeft, oDlg:nRight, oDlg:nBottom )

   oActiveX:SetProp( "FileName", cFile )

Return NIL


un saludo
JLL

Re: Ayuda sobre TVIDEO y DIALOGS

PostPosted: Wed Feb 03, 2010 8:44 pm
by jll-fwh
Se me ha olvidado comentar que ya he probado hacer:

VALID ( oActiveX:DO( "Stop" ), .T. )

Da un error:

Stack Calls
===========
Called from: => DO(0)
Called from: .\PROC2003.PRG => (b)MOSTRARWMP(0)
Called from: => TDIALOG:END(520)
Called from: => TDIALOG:COMMAND(419)
Called from: => TWINDOW:HANDLEEVENT(0)
Called from: => TDIALOG:HANDLEEVENT(922)
Called from: => DIALOGBOXINDIRECT(0)
Called from: => TDIALOG:ACTIVATE(273)
Called from: .\PROC2003.PRG => MOSTRARWMP(0)
Called from: .\PROC2003.PRG => MEDIAXWMP(0)
Called from: .\PROC2001.PRG => (b)TABLAMULTIMEDIA(0)
Called from: => TVMENU:EVALACTION(0)
Called from: => TVMENU:LBUTTONUP(0)
Called from: => TWINDOW:HANDLEEVENT(0)
Called from: => TCONTROL:HANDLEEVENT(1454)
Called from: => TVMENU:HANDLEEVENT(0)
Called from: .\WINDOW.PRG => _FWH(0)
Called from: => WINRUN(0)
Called from: => TMDIFRAME:ACTIVATE(0)
Called from: .\ALERT.PRG => MAINOPENWND(0)
Called from: .\ALERT.PRG => MAIN(0)

un saludo
JLL

Re: Ayuda sobre TVIDEO y DIALOGS

PostPosted: Thu Feb 04, 2010 12:27 pm
by Daniel Garcia-Gil
Saudos...


en el codigo tienes un error

ActivaVIDEO( oDlg, oActiveX, cFile )

o pasas oActiveX por referencia o haces asi oActiveX := ActivaVIDEO( oDlg, cFile )
si usas la version actual de fivewin puedes acceder a los propiedades directamente

oActiveX:FileName = cFile
oActiveX:Stop()

SetProp, Do... se han mantenido por compatibilidad en versiones anteriores

Re: Ayuda sobre TVIDEO y DIALOGS

PostPosted: Thu Feb 04, 2010 2:35 pm
by jll-fwh
Hola Daniel:

Efectivamente era eso. Me enceque y no he visto este fallo tan tonto. Muchas gracias.

Un saludo. Gracias.
JLL

Re: Ayuda sobre TVIDEO y DIALOGS

PostPosted: Thu Feb 04, 2010 8:05 pm
by Daniel Garcia-Gil
Disculpa otra observacion


aunque no da error DeleteObject( ) no te sirve para eliminar el objeto active pues esta se usa para liberar objetos GDI, a menos que tengas una funcion propia llamada asi, lo cual te causaria problemas porque entonces no se liberarian los GDI correctamente

Re: Ayuda sobre TVIDEO y DIALOGS

PostPosted: Fri Feb 05, 2010 3:36 am
by jll-fwh
Hola Daniel

Gracias, es una construmbre el utilizar el DeleteObject(), ya ha sido borrada.

Ahora estoy intentando poder visualizar tambie ficheros de QuickTime (.MOV, etc ) pero de momento solo he logrado que se muestre pero no activar el video.

Seguro que lo estoy haciendo mal, porque no se ni siquiera si el .ocx es el adecuado. En internet no he localizado informacion sobre esto.

Por si alguien lo lee, dejo el codigo de la funcion¨:



/*------------------------------------------------------------------------------*/
STATIC Function MostrarQT( cFile, cTitle )
/*------------------------------------------------------------------------------*/

*/ Funcion ActiveX para visualizar el QT ( Quick Time ) dentro de un Dialogo. */

LOCAL oDlg, oActiveX

DEFINE DIALOG oDlg TITLE cTitle FROM 1,1 TO 300,580 PIXEL

oDlg:lHelpIcon := .F.

ACTIVATE DIALOG oDlg CENTERED;
ON INIT ( oActiveX := ActivaQT( oDlg, oActiveX, cFile ) );
VALID ( oActiveX:DO( "Stop" ), oActiveX:End(), .T. )

Return NIL
/*------------------------------------------------------------------------------*/
STATIC Function ActivaQT( oDlg, oActiveX, cFile )
/*------------------------------------------------------------------------------*/

oActiveX = TActiveX():New( oDlg, "QuickTime.QuickTime.9",;
oDlg:nTop, oDlg:nLeft, oDlg:nRight, oDlg:nBottom )

oActiveX:DO( "SetMovieName", cFile )

Return( oActiveX )

De nuevo gracias Daniel, estoy empezando a usar ActiveX con estas funciones, de momento no tengo ni idea relamente como funcionan.

Un saludo
JLL

Re: Ayuda sobre TVIDEO y DIALOGS

PostPosted: Fri Feb 05, 2010 12:16 pm
by Daniel Garcia-Gil
Hola...


creo que deberias documentarte en todos los eventos y propiedades de los controles activex que quieras usas, imagino que te debe faltar usar un "PLAY", no lo se, FWH solo te brinda la herramienta (TActiveX) para enlazarte con el control

Re: Ayuda sobre TVIDEO y DIALOGS

PostPosted: Fri Feb 05, 2010 2:11 pm
by jll-fwh
Hola DanieL.

Existe un metodo PLAY, aunque en el codigo que copie no esta, es el que arranca supuestamente el video, "lo borraria sin darme cuenta al copiarlo", no lo se, pero efectivamente no esta en la copia que puse aqui.

Otro pequeño detalle se me escapa para que no arranque el video. a ver si alguien lo ha probado y comenta donde esta el fallo.

Para saber las propiedades y metodos que usa un activeX uso el programa activeXXX que es FREE.

oActiveX:DO( "Play" )

Un saludo
JLL

Re: Ayuda sobre TVIDEO y DIALOGS

PostPosted: Fri Feb 05, 2010 2:17 pm
by jll-fwh
En estos momentos las funciones estan asi:


/*------------------------------------------------------------------------------*/
STATIC Function MostrarQT( cFile, cTitle )
/*------------------------------------------------------------------------------*/

*/ Funcion ActiveX para visualizar el QT ( Quick Time ) dentro de un Dialogo. */

*/ DE MOMENTO NO FUNCIONA */

LOCAL oDlg, oActiveX

DEFINE DIALOG oDlg TITLE cTitle FROM 1,1 TO 300,580 PIXEL

oDlg:lHelpIcon := .F.

ACTIVATE DIALOG oDlg CENTERED;
ON INIT ( oActiveX := ActivaQT( oDlg, oActiveX, cFile ) );
VALID ( oActiveX:DO( "Stop" ), oActiveX:End(), .T. )

Return NIL
/*------------------------------------------------------------------------------*/
STATIC Function ActivaQT( oDlg, oActiveX, cFile )
/*------------------------------------------------------------------------------*/

oActiveX = TActiveX():New( oDlg, "QuickTime.QuickTime.9",;
oDlg:nTop, oDlg:nLeft, oDlg:nRight, oDlg:nBottom )

oActiveX:SetProp( "SetMovieName", cFile )
oActiveX:DO( "Play" )

Return( oActiveX )