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 OCXsArquitectura 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:
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