Usando los ActiveX de Wang para visualizar JPEG y GIF desde VFOX

Por Nicolas Candela
© Copyrights 1997 by FoxPress, All rights reserved
FoxPress, Mayo 1997

Una de las deficiencias que tiene VFP 5.0 es que al igual que sus antecesores no está bien dotado a la hora de mostrar gráficos JPEG,GIFF, etc... Esto parece que se resolverá en la futura versión VFP 6.0 pero mientras nos llega esa versión tenemos varias alternativas a la hora de tratar gráficos.

Una alternativa es comprarnos una librería que nos permita visualizar esos gráficos como por ejemplo la de ESPIA http://www.espia.com) muy bien considerada dentro del mundo Fox.

Otra alternativa es crearnos nuestro propio lector de gráficos mediante el CCE que viene con VB 5.0 tal y como se mostró en esta revista hace un par de números. No obstante ese sistema tiene la 'pequeña' limitación de que al cliente hay que llevarle una librería de Visual Basic para que funcione correctamente.

La alternativa que yo propongo es usar los controles .OCX de Wang que vienen gratis en Windows NT 4.0 y en Windows95 (versión nueva), con lo que no tenemos que gastarnos un duro y no hay que preocuparse de más problemas.

Los .OCX de Wang han sido creados por Wang Ltd. una empresa radicada en Massachussetts (http://www.wang.com) y con el ánimo de crear un estándar se han distribuido en los NT y en Windows95. Si por la razón que sea no lo tienes en tu sistema operativo —cosa que puede suceder en la version original de Windows95— siempre te los puedes bajar de: http://www.microsoft.com/ windows/software/img_us.htm

 

Descripción de las .OCX de Wang

Con los ActiveX de Wang podemos:

 

Características Técnicas

Las .OCX de Wang nos permiten tratar imágenes en nuestras aplicaciones de las siguientes características:

Funcionalidad Imaging OCXs

Arquitectura 32-bit (Windows 95 y NT)

Imagen soportada Blanco y Negro
Escala de Grises

Gray4
Gray8
Color
Palettized4
Palettized8
RGB24
BGR24


Lectura de Archivos BMP

AWD
WIF

DCX
JPG
PCX
TIF
XIF

Escritura en formato BMP
AWD
TIF

Tipos de compresión Group 3 (1D)
Group 3 (2D)
Group 3 (Modified

Huffman)
Group 4 (2D)
JPEG
LZW
PackBits
PCX
RBA
Xerox-proprietary

Por tanto, se pueden crear documentos gráficos en una variedad de formatos y se pueden usar scanners para crear imágenes directamente desde el original. El software soporta el interfaz TWAIN, el más popular interfaz de scanners del mercado.

El fax es otra forma de crear documentos gráficos. Una máquina de fax es de alguna manera un scanner que toma un documento y lo convierte en una imagen electrónica. Este software es la forma que usa Microsoft Exchange Inbox para ver los fax que le llegan

 

 

Elementos de que se compone

El conjunto de ActiveX de Wang consta de:

 

Automatización OLE

Como para todas las invocaciones OLE desde FoxPro, se usa la orden CREATEOBJECT para llamar al Servidor de Automatización de Wang. En este caso sería:

 

oWang = CreateObject("WangImage.Application")

El siguiente gráfico (sacado de la Web de Microsoft) nos muestra las posibilidades de este objeto:

La Automatización OLE está implementada siguiendo las normas de los objetos COM y su uso es similar al de Microsoft Word y Microsoft Excel. La jerarquía de objetos comienza con el objeto Aplicación, a continuación un objeto Documento, objeto Página y luego objeto Rango. Cada objeto tiene su propio conjunto de propiedades y métodos. El objeto PageRange permite que los objetos Page sean agrupados y tratados como una unidad.

Las primeras líneas, si quisieramos hacerlo vía código serían:

 

oWang.CreateImageViewerObject()

oWang.TopWindow = .T.

oWang.Quit

Más información sobre el uso de sus métodos y propiedades se puede obtener en:

http://www.eastmansoftware.com/imaging/ infodev.htm#Imaging for Windows 95 ActiveX Documentation

Y en http://www.eastmansoftware.com/imaging/ ms_getst.doc tienes también un pequeño ejemplo en Visual Basic con las posibilidades de cada uno de los controles.

 

Un ejemplo

Como 'una imagen vale más que 1000 palabras' aqui va un ejemplo de un formulario Fox que me permite rotar una imagen, cambiar sus colores, usar zoom, etc..

El ejemplo está hecho en VFP 5.0. Si usas VFP 3.0 o 3.0b tendrías que recompilarlo pero funcionaría también correctamente.

De todo el código que devuelve el Class Browser transcribo únicamente lo correspondiente a los botones del formulario que nos muestran lo sencillo que es manipular las diversas imágenes:

PROCEDURE Init
	public gzoom
	gzoom = 100
	_vfp.Autoyield = .T.
	SYS(2333,0)
ENDPROC
PROCEDURE cbboton6.Click
	ThisForm.Olecontrol1.Flip
ENDPROC
PROCEDURE cbboton6.Click
	ThisForm.Olecontrol1.Flip
ENDPROC
PROCEDURE cbboton2.Click
	ThisForm.Olecontrol1.Object.RotateLeft
ENDPROC
PROCEDURE cbboton7.Click
	ThisForm.Olecontrol1.ZoomToSelection
ENDPROC
PROCEDURE cbboton5.Click
	ThisForm.Olecontrol1.Object.RotateRight
ENDPROC
PROCEDURE cbcombobox1.Init
	This.DisplayValue = "100 %"
ENDPROC
PROCEDURE cbcombobox1.InteractiveChange
	DO CASE
		CASE This.ListIndex = 1
			ThisForm.Olecontrol1.Object.Zoom = 25
		CASE This.ListIndex = 2

ThisForm.Olecontrol1.Object.Zoom = 50 CASE This.ListIndex = 3 ThisForm.Olecontrol1.Object.Zoom = 75 CASE This.ListIndex = 4 ThisForm.Olecontrol1.Object.Zoom=100 CASE This.ListIndex = 5 ThisForm.Olecontrol1.Object.Zoom=125 CASE This.ListIndex = 6 ThisForm.Olecontrol1.Object.Zoom=150 CASE This.ListIndex = 7 ThisForm.Olecontrol1.Object.Zoom=175 CASE This.ListIndex = 8 ThisForm.Olecontrol1.Object.Zoom=200 ENDCASE ENDPROC PROCEDURE cbboton3.Click ThisForm.Olecontrol1.Object.FitTo(0,.T.) This.Parent.Cbcombobox1.DisplayValue = ; ThisForm.Olecontrol1.Zoom

ENDPROC PROCEDURE cbboton4.Click ThisForm.Olecontrol1.Object.; ShowAnnotationToolPalette ENDPROC PROCEDURE cbcombobox2.InteractiveChange DO CASE CASE This.ListIndex = 1 ThisForm.Olecontrol1.ImagePalette = 0 CASE This.ListIndex = 2 ThisForm.Olecontrol1.ImagePalette = 1 CASE This.ListIndex = 3 ThisForm.Olecontrol1.ImagePalette = 2 CASE This.ListIndex = 4 ThisForm.Olecontrol1.ImagePalette = 3 CASE This.ListIndex = 5 ThisForm.Olecontrol1.ImagePalette = 4 ENDCASE ENDPROC PROCEDURE cbcombobox2.Init This.DisplayValue = "Custom" ENDPROC PROCEDURE cbboton1.Click ThisForm.Olecontrol2.Object.InitDir = ; "C:\psp\" && Directorio donde estén && las imágenes ThisForm.Olecontrol2.Object.DialogTitle; = "Abrir una Imagen" ThisForm.Olecontrol2.Object.Filter = ; "Todas las imagenes|*.jpg;*.bmp;; *.pcx|JPEG|*.jpg|BMP|*.bmp|PCX| * .pcx|" ThisForm.Olecontrol2.Object.FilterIndex; = 1 ThisForm.Olecontrol2.Object.DefaultExt ; = "*.JPG" * Utilizar con WIN 95 * ThisForm.Olecontrol2.Object.; * ShowFileDialog(0,MainHwnd()) * Utilizar con Windows NT 4.0 ThisForm.Olecontrol2.Object.; ShowFileDialog(0) ThisForm.Olecontrol1.Object.Image = ; ThisForm.Olecontrol2.Object.Image ThisForm.Olecontrol1.Object.Zoom=100 ThisForm.Olecontrol1.Object.Display ThisForm.MousePointer = 0 ThisForm.Cbcontainer1.Enabled = .T. ThisForm.Cbcontainer1.SetFocus ThisForm.Refresh ENDPROC

Espero que este artículo y este sencillo ejemplo te sirva para darte cuenta de las muchas posibilidades que tienen estos controles.

Con estos controles se puede llegar a hacer que de forma automática se escaneen los documentos que vienen en papel y convertirlos al formato de un tratamiento de textos y guardarlos en un directorio de Windows y a continuación enviar un e-mail del fichero a un colega. Esto en la actualidad lo tienes que hacer de forma manual y así lo haces con solo apretar un botón. Esto es algo que sin duda ahorra tiempo.

Con la versión comercial de estos controles se puede examinar el texto sobre la imagen que nos deja el fax, archivar el documento en un directorio en función de la información que nos trae, poner unos accesos rápidos en otros directorios para acceder de forma rápida a éste y notificárselo mediante e-mail a una persona ¿Qué te parece?

Y además, extraer las palabras clave del índice de forma que se pudieran trasladar al buscador de la red para que fuera más fácil acceder a ellas.

Con la versión comercial también se pueden traducir directamente los documentos a formato HTML con un simple click y todo en un periquete.

 

A considerar

Los OCX de Wang se hicieron pensando en Visaual Basic, es posible que en algunos sistemas y bajo ciertas circustancias provoquen algún fallo en el programa.

Se han detectado algunos fallos en las siguientes situaciones:

  • En formularios modales. No aparece el OCX.
  • Al lanzar las pantallas de diálogo de los OCX, algunas necesitan el handdle del formulario. Para saber cuál es se ha de utilizar la librería FOXTOOLS.FLL

 

Nicolas Candela Alvarez es socio de DREAM CONSULTORES, empresa especializada en aplicaciones de gestión en FoxPro y Visual FoxPro radicada en Alicante. Se puede entrar en contacto con él en E-mail: nca@arrakis.es