Page 1 of 2

TActiveX() (play a video or sound)

PostPosted: Fri Jun 14, 2013 6:22 pm
by acuellar
TActiveX() no Funciona en FWH 12.12 Alguien sabe porque

oActiveX = TActiveX():New( oDlg,"MediaPlayer.MediaPlayer.1",oDlg:nTop, oDlg:nLeft, oDlg:nRight, oDlg:nBottom )
Sale este error: Can't read from type ActiveX

Existe otra manera de mostrar videos.

Gracias

Saludos,

Adhemar

Re: TActiveX()

PostPosted: Fri Jun 14, 2013 8:23 pm
by Antonio Linares
Adhemar,

Prueba con este código:

Code: Select all  Expand view
#include "FiveWin.ch"

function Main()

   local oWnd, oActiveX

   DEFINE WINDOW oWnd TITLE "FiveWin ActiveX Support"

   oActiveX = TActiveX():New( oWnd, "WMPlayer.OCX" )

   oWnd:oClient = oActiveX // To fill the entire window surface

   oActiveX:url = "clapping.wav"

   ACTIVATE WINDOW oWnd

return nil

Re: TActiveX()

PostPosted: Sun Jun 16, 2013 10:43 am
by acuellar
Gracias Antonio,
Funciona

Este es mi código:
Code: Select all  Expand view

Function PlayVideo()
   Private oDlg, oActiveX,aCoors:=GetCoors( FindWindow("Shell_TrayWnd","") )
   VideoPath:=AllTrim(UBICACION)+AllTrim(NOMBRE)+'.'+EXT
   
   If !File(VideoPath)
     MsgAlert("No existe el video","Lo siento")
     Return
   Endif
 
   DEFINE DIALOG oDlg TITLE UPPER(NOMBRE) FROM -7,1 TO aCoors[1]-11, aCoors[4] PIXEL;oDlg:lHelpIcon := .F.
    oActiveX = TActiveX():New( oDlg,"WMPlayer.OCX" )
   ACTIVATE DIALOG oDlg CENTER ON INIT MuestraVIDEO()
   oDlg:End()

Return NIL
*
STATIC Function MuestraVIDEO()
 
  oDlg:oClient = oActiveX
  oActiveX:url = VideoPath

Return Nil

 

Cómo hacer para que se muestre en toda la pantalla?
Cómo hacer que se cierre el dialogo al finalizar el video?
Cómo controlar el balance del audio?
Que muestre la duración?
Al cerrar el dialogo se sigue reproduciendo. Como finalizarlo oActiveX:Stop() no funciona.

Gracias distinguido.

Saludos,

Adhemar

Re: TActiveX()

PostPosted: Sun Jun 16, 2013 4:07 pm
by Antonio Linares
Adhemar,

Nota: X: en el código es X: (es que no aparece bien)

Prueba asi:

Code: Select all  Expand view
#include "FiveWin.ch"

function Main()

   local oDlg

   DEFINE DIALOG oDlg TITLE "FiveWin ActiveX Support"

   ACTIVATE DIALOG oDlg ;
      ON INIT BuildMPlayer( oDlg )

return nil

function BuildMPlayer( oDlg )

   local oActiveX

   oActiveX = TActiveX():New( oDlg, "WMPlayer.OCX" )

   oDlg:oClient = oActiveX // To fill the entire window surface

   oActiveX:Settings:Volume = 7

   oActiveX:url = "clapping.wav"
   oActiveX:EnableContextMenu()
   
   oDlg:Maximize()
   
   while oActiveX:Playstate != 1
      SysRefresh()
   end
   
   oDlg:End()

return nil

Re: TActiveX()

PostPosted: Mon Jun 17, 2013 1:40 pm
by acuellar
Gracias Antonio

Cuando termina de reproducirse el video se cierra perfecto.
pero cuando cierro el dialogo el video sigue reproduciéndose.

Muchas gracias.

Saludos,

Adhemar

Re: TActiveX()

PostPosted: Mon Jun 17, 2013 2:17 pm
by Antonio Linares
Adhemar,

Si, lo he observado tambien. No se si algun evento pueda ayudarnos.

Primero intenté con eventos pero no encontré un patrón que pudiese ser el fin de reproducción y al final encontré la otra forma de hacerlo sin eventos.

Y la documentación de Microsoft y ejemplos que encontré no ayudaron lo suficiente. Pero bueno, algo es algo, igual encontramos la forma más adelante :-)

Re: TActiveX()

PostPosted: Mon Jun 17, 2013 2:35 pm
by acuellar
Gracias Antonio


Estaré aguardando.

Saludos,

Adhemar

Re: TActiveX()

PostPosted: Mon Jun 17, 2013 3:11 pm
by Antonio Linares
Creo que esto puede servir: :-)

en el VALID del diálogo podemos hacer:

oActiveX:controls:Stop() y luego devolver .T.

Re: TActiveX()

PostPosted: Mon Jun 17, 2013 3:30 pm
by acuellar
Gracias Antonio

Funciona perfecto.

Cómo hacer que el video se inicie maximizado?

De donde se puede conseguir información sobre mas controles.

Gracias por tu tiempo.

Saludos,

Adhemar

Re: TActiveX()

PostPosted: Mon Jun 17, 2013 3:58 pm
by Antonio Linares
Adhemar,

El diálogo se muestra maximizado ? oDlg:Maximize() desde ON INIT. Si has hecho oDlg:oClient := oActiveX se ajustará automaticamente.

Toda la información necesaria para proporcionarte este ejemplo la he conseguido en google, simplemente buscando :-)

Busca por el nombre del ActiveX y revisa los ejemplos que te aparezcan, aunque esten en otros lenguajes. Te servirán para ver todo lo que se puede hacer con él :-)

Re: TActiveX()

PostPosted: Mon Jun 17, 2013 5:16 pm
by acuellar
Antonio

Efectivamente el dialogo aparece maximizado, el video no, hay que dar doble click para que maximice en toda la pantalla.

Cómo dar doble click?

Gracias distinguido.

Saludos,

Adhemar

Re: TActiveX()

PostPosted: Mon Jun 17, 2013 8:26 pm
by Antonio Linares
Aqui lo tienes:

Code: Select all  Expand view
#include "FiveWin.ch"

static oActiveX

function Main()

   local oDlg

   DEFINE DIALOG oDlg TITLE "FiveWin ActiveX Support"

   ACTIVATE DIALOG oDlg ;
      ON INIT BuildMPlayer( oDlg ) ;
      VALID ( oActiveX:controls:Stop(), .T. )

return nil

function BuildMPlayer( oDlg )

   oActiveX = TActiveX():New( oDlg, "WMPlayer.OCX" )

   oDlg:oClient = oActiveX // To fill the entire window surface

   oActiveX:Settings:Volume = 7

   oDlg:Maximize()

   oActiveX:url = "fivewin.avi"
   oActiveX:StretchToFit = .T.
   oActiveX:EnableContextMenu()
   
   while oActiveX:Playstate != 1
      SysRefresh()
   end
   
   oDlg:End()

return nil

Re: TActiveX()

PostPosted: Mon Jun 17, 2013 9:08 pm
by Antonio Linares
En su dia inspeccioné ese objeto y esta es la lista de propiedades y metodos que obtuve:

viewtopic.php?p=144616#p144616

Re: TActiveX()

PostPosted: Tue Jun 18, 2013 1:03 pm
by acuellar
Perfecto.

Gracias Distinguido.

Cómo obtener la duración del video, como la muestra el explorador de Windows para cargar los videos a una base.
Uso el comando DIR desde DOS
DIR C:\VIDEOS\*.AVI /S/-C >>VIDEOS.TXT //No muestra la duración.

Gracias por tu tiempo y ayuda.


Saludos,

Adhemar

Re: TActiveX()

PostPosted: Tue Jun 18, 2013 6:46 pm
by Antonio Linares
Añade esta linea:

Code: Select all  Expand view
  while oActiveX : Playstate != 1
      SysRefresh()
   end

   MsgInfo( oActiveX : currentmedia:durationString )  // esta línea