FoxPress – Enero 2000

 

Visualización de Ficheros AVI’s

http://www.fpress.com/

 

         

       Por Alberto Rodríguez

 

 

      Recientemente un cliente me pidió que le mostrara la forma de visualizar ficheros .AVI en Fox.

 

         La verdad es que la mejor forma de visualizarlos es dentro de la Web y lo puedes hacer con el siguiente código:

 


 

 


No obstante, el cliente insistía en que quería hacerlo desde Fox.

En mi ayuda vinieron las clases que acompañan a Visual Studio 6.0 y pude realizar lo mismo pero de dos formas:

 

 

Ejemplo 1

 

Este ejemplo consiste en un formulario con dos controles ActiveX que vienen con Fox y son:

 

·         El control MCI

·         El control FoxHWND

 

 

El código es muy simple. Unicamente trascribiré el código del INIT del formulario pues el resto lo tienes en los fuentes que se adjuntan a este artículo. Acuérdate de actualizar el path cuando lo pruebes.

 

Por cierto, te adjunto una pequeña peliculita en la que Sandra Bulloc es la protagonista principal. Como podrás deducir se trata de LA RED.

 

El código del INIT del formulario sería el siguiente:

 

 

* Comprueba si estan las OCX y si consigue cargarlas.

IF TYPE("THIS.VCR") # "O" OR ISNULL(THIS.VCR)

      RETURN .F.

ENDIF

IF TYPE("THIS.PAPER") # "O" OR ISNULL(THIS.PAPER)

      RETURN .F.

ENDIF

 

ThisForm.VCR.hWndDisplay = ThisForm.Paper.hWnd

ThisForm.VCR.UpdateInterval = 200

ThisForm.VCR.TimeFormat = 3

ThisForm.VCR.DeviceType = 'AVIVideo'

cFileName = SYS(1271, ThisForm)

cFileName = SUBSTR( cFileName, 1,;

 RAT( "\", cFileName ))

ThisForm.VCR.FileName = cFileName + ;

'Deleted1.avi'

ThisForm.VCR.Shareable = .F.

ThisForm.VCR.Command = 'Open'

SET PALETTE OFF

 

Application.AutoYield = .F.

 

Que se vería de la siguiente forma. A proposito dejo el pequeño icono del zorro para que se vea que estamos viendo el AVI dentro de Fox.

 

 

 

 

 

 
Ejemplo 2

 

Pero tenemos más posibilidades. El siguiente ejemplo es bastante parecido al anterior pero en este caso no usamos ninguna OCX sino que son funciones del API de Windows.

 

                Siguiendo con la misma película, ahora la visualizariamos así:

 

 

      Como se ve es más espartano y ahora hemos tenido que crearnos los controles.

 

      Todo se basa en tres funciones del API de Windows que se declaran así:

 

*!* Para enviar las órdenes MCI

DECLARE INTEGER mciSendString ;

   IN WinMM.DLL ;

   STRING cMCIString,;

   STRING @cRetString,;

   INTEGER nRetLength,;

   INTEGER hInstance

 

*!* Para recuperar el último error MCI que se haya

*!* producido

DECLARE INTEGER mciGetErrorString ;

   IN WINMM.DLL ;

   INTEGER nErrorno, ;

   STRING @cBuffer, ;

   INTEGER nBufSize

  

*!* Cuando se usa MCI se crea su propio Window.

     *!*Y mediante esta función del API podemos hacer

     *!*que esa ventana coincida exactamente con la *!*nuestra

 

     DECLARE integer SetWindowPos ;

    IN User32 ;

    integer, integer, integer, integer,;

 integer, integer, integer

 

 

Hay bastante más código pero lo tienes en los Fuentes.

 

 

Ejemplo 3

 

 

Cuando ya había preparado los anteriores ejemplos me acordé de un truco que había publicado en esta revista Ignacio Solanilla en Septiembre de 1998.

 

El truco usaba el control Microsoft Animation Control.

 

La ventaja de este ejemplo es que con dos líneas de código puedes poner en funcionamiento el AVI pero tiene una carencia importante y es que no visualiza .AVI de más de 16 colores.

 

Por eso ahora no podremos ver a  la guapa Sandra Bulloc sino que veremos un aburrido contador de Bill Gates:

 

 

 

 

                El código es el mismo que señalaba Ignacio en la revista.

 

 

Ejemplo 4

 

 

Otra de las posibles soluciones es usar el control del Explorer para poder hacer esto, sitúa un control Web Browser en tu formulario y establece el tamaño, Name y las cosas que necesites.

 

En el Init del formulario escribe:

THISFORM.oIE.Navigate("c:\migif.gif")

 

Después de ejecutar el formulario, puedes fijarte en los valores por defecto que se muestran en las barras de scroll del WebBrowser. Para poderlos a off necesitas escribir un poco más de código:

DO WHILE THISFORM.oIE.ReadyState <> 4
ENDDO
THISFORM.oIE.Document.Body.Scroll = "no"

Nota- en algunas máquinas rápidas este código funciona tan rápido que parece que no funciona. La única forma que he encontrado de solucionar este problema es poner todo este código en un control timer y establecer los valores del intervalo del Timer a 25 Al final el propio Timmer se desactiva:

THIS.Interval = 0
ThisForm.OIE.Navigate("c:\logoani.gif")
DO WHILE THISFORM.oIE.ReadyState <> 4
ENDDO

THISFORM.oIE.Document.Body.Scroll = "no"

Esto establece un suficiente retardo como para que el IE pueda aceptar los parámetros

 

 
Ejemplo 5

 

Tengo que reconocer que con los ejemplos anteriores estaba muy seguro de satisfacer todas las necesidades de mi cliente, pero fue bastante mi frustración cuando lo que se me pidió era que se pudiera visualizar en Fox una imagen que se estaba grabando en ese mismo momento con una camara tipo WebCam TWAIN compatible.

 

Para esto, aunque se podría haber seguido con las API de Windows opté por una vía más cómoda y es acudir a la librería de funciones de ESPIA de http://www.espia.com

 

El conjunto de librerías de ESPIA fue creado por  Greg Carpenter en 1993. Siempre orientado al mundo Fox, ha ofrecido la posibilidad de dotar de gráficos y todo tipo de opciones multimedia a los programadores Fox en los entornos DOS,Win 3.x y ahora para Visual FoxPro.

En 1993, Microsoft Corporation adquirió todo el software de ESPIA e incorporó a Greg Carpenter al equipo de desarrollo de Visual FoxPro 3.0.  El creó el control Grid y todo el instrumental del modelo de objetos. Con posterioridad ha colaborado  con la Warner Bros, Paramount y otros para establecer los canales del IE 4.0.  Ha liderado los equipos de desarrollo de Windows CE, IE 5.0.

 

Las clases de Espia TWAIN son .FLL el tradicional formato que se usaba en el mundo Fox cuando tenías que utilizar funcionalidades de C. Las Clases nos permiten capturar imágenes desde  scanners, video capture boards, cámaras digitales y otros drivers  compatibles TWAIN.

 

Desgraciadamente no puedo poner el código pues no hay versión de evaluación que se pueda adjuntar a la revista. No obstante, el producto es excelente y de gran calidad.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

FoxPress – Enero de 2000

© 1999 FoxPress. All rights reserved