Escaneando desde VFP

Por Pedro Pascua
© Copyrights 1998 by FoxPress, All rights reserved
FoxPress, Septiembre 1998

En cierta ocasión un cliente me pidió una aplicación que debería escanear documentos. Tengo que reconocer que en una primera instancia me entró cierto panico pues era un tema que no había hecho nunca y siempre que uno se enfrenta a temas desconocidos (ultimamente esto es cada vez más frecuente) se le enciende una luz indicando ¡Peligro!

No obstante, superado el primer instante me recordaron la existencia de las .OCX de Wang. Estas .OCX tienen una serie de ventajas que podríamos resumir en las siguientes:

  • 1.- Son bastante buenas
  • 2.- Funcionan perfectamente con VFP
  • 3.- Son Gratis (vienen con el Win95)(No están en la versión original del Win95 pero si en las posteriores releases)

    Lo primero antes de empezar a trabajar es conseguirse las herramientas y documentarse un poco.

    Si uno está trabajando con Win95 OSR-1 o NT estas .OCX ya las tendrá en su máquina lo único que habrá que hacer es quizás registrarlas con la utilidad que viene con VFP y que se llama REGSVR32.EXE

    En caso de que trabajes con Win95 (versión original) deberás bajarte de la Web los ficheros de estas .OCX. Los tienes disponibles en el ftp de Microsoft en la dirección ftp.microsoft.com/softlib/mslfiles/imginst.exe

    En este fichero nos encontramos con una serie de controles que son:

    El Wang’s Image Admin control (IMGADMIN.OCX)

    Este control nos permite administrar los archivos de imágenes que residen en nuestro PC o en una red (LAN). Las habituales ventanas de diálogo de Imprimir y Archivo soportan diversos formatos como la posibilidad de administrar los directorios y crar, borrar, renombrar directorios y establecer los atributos de los archivos de las imagenes y de los directorios.

    Algunas funciones específicas de las imágenes te permiten insertar, añadir, y reemplazar páginas en un archivo de tipo multi-página.

    El control Thumbnail de Wang (IMGTHUMB.OCX)

    El control Image Thumbnail muestras las imágenes que se encuentran en un fichero en un pequeño rectangulo que se llama thumbnail de forma uniforme. Los Thumbnails son útiles para mostrar todas las páginas de un archivo de imágnes multipágina en formato de miniatura. Cuando especificas una archivo de imagenes, las representaciones del thumbnail son generadas y guardadas en un buffer para su posterior uso. Puedes escoger trabajar con thumbnails que se encuentran en el buffer o escoger que se regeneren los thumbnails para reflejar subsecuentes cambios en el archivo de imagen, tal como páginas insertadas o borradas, o aleraciones realizadas en las páginas como anotaciones.

    Este control puede ser configurado para hacer scroll ya sea vertical y horizontalmente. Cuando se hace scroll verticalmente, los thumbnails se muestran secuencialmente empezando por arriba a la izquierda . La barra de scroll se muestra cuando hay más thumbnails de los que caben en el espacio disponible .

    El control Image Edit (IMGEDIT.OCX)

    Este control añade anotaciones a los gráficos lo que permite que el usuario pueda mostrar, anotar, manipular y manejar los archivos de imágenes.

    El control Image Scan (IMGSCAN.OCX)

    Este control añade capacidades de scaner a las aplicaciones que soportan controles OLE de 32-bit. El control de Scan es invisible y puede trabajar independientemente de los otros controles. Para mostrar imagenes miestras están siendo escaneadas se puede hacer una llamada al control Wang Image Edit.

    El control Image Annotation Tool

    Este control añade anotaciones en forma de imágenes a aplicaciones que soportan controles OLE de 32 bits. Capacita a los usuarios a añadir texto y anotaciones gráficas que se deben mostrar junto con las imágenes de los archivos.

    Con estos .OCX vienen un buen cúmulo de ficheros de ayuda pero si uno todavía necesita ejemplos, puede usar el fichero imgocxd.exe que se adjunta en este número de la revista y que puede ayudar al desarrollador.

    Cómo seguramente se querá ver un poco más de código y un poco menos de teoría, aquí va un ejemplo que ha usado 4 de estos controles:

  • - El de Scaner
  • - El IMGEDIT
  • - El IMGTHUMB
  • - El IMGADMIN

    Se trata de un formulario que permite scanear desde un scanner compatible TWAIN y guardar los documentos (incluso los que tienen más de una página) en un fichero .TIFF.

    Pasos a realizar

  • 1.- Crea un formulario nuevo
  • 2.- Deposita en cualqueir lugar del formulario las .OCX IMGADMIN y de Scanner llamándoles respectivamente en la propiedad NAME de la ventana de propiedades con los nombres oImgAdmin y oScan
  • 3.- Deposita la .OCX de IMGFTHUMB en el lado izquierdo haciendo un marco similar al de la fotografía. Llámala ImgIndex.
  • 4.- Deposita la .OCX de IMGEDIT en el lado derecho del formulario haciendo un marco similar al de la fotografía. Llámala oImage
  • 5.- Escribe en el INIT del formulario:

    glCompletado = .F.
    glScan = .T.
    glEditar = .F.
    
    If !ThisForm.oScan.ScannerAvailable
    	=Messagebox("No tiene ningún dispositivo de digitalización instalado",48,"Aviso")
    	ThisForm.Release()
    EndIf
    
    thisform.oScan.DestImageControl="ImgEdit2"
    thisform.oScan.Zoom = 25.
    If glEditar
    	thisform.oImage.Image = gcFileName
    	thisform.oImgIndex.Image = gcFileName
    	thisform.oImage.Display
    	This.Filename = gcFilename
    	thisform.oScan.pageoption=3
    Else
    	This.Filename = fullpath('Docs\images\'+ThisForm.oImgAdmin.GetUniqueName('Docs\Images','','tif'))	
    	thisform.oScan.pageoption=1
    EndIf
    thisform.oScan.Image = (ThisForm.FileName)
    

    Este código nos permite distinguir si vamos a editar una imagen tenemos previamente guardada o vamos a crear un nuevo .TIF

    El código para escanear la imagen la ponemos en el botón al que le hemos dado el caption de “Agregar Página” y es tan sencillo como sigue:

    thisform.oScan.OpenScanner()
    thisform.oScan.FileType = 1
    Thisform.oScan.PageType = 3
    
    thisform.oScan.startscan()
    thisform.oScan.CloseScanner()
    thisform.oImgIndex.Image = (ThisForm.FileName)
    If thisform.oScan.pageoption = 1
    	thisform.oScan.pageoption = 3
    EndIf
    

    Si queremos dotar de la opción de Zoom lo único que tenemos que escribir en el Click correspondiente es

    ThisForm.oImage.Zoom = ThisForm.;
    oImage.Zoom * 1.25
    

    Y para imprimir la imagen que acabamos de guardar escribimos lo siguiente:

    If 6 = MessageBox("¿Imprimir imagen actual?",4+32,"Confirmar envío a impresora")
    	thisform.oImage.PrintImage()
    EndIf
    

    Y si queremos configurar el Scanner tenemos la posibilidad de ejecutar:

    Thisform.oScan.ShowScannerSetup()
    

    Que nos permitirá invocar la ventana de configuración del propio scaner.

    Observaciones

    El fuente del ejemplo se ha realizado usando el imaging 1.0. No obstante hay una versión más avanzada del Imaging en http://www.fpress.com/bbs/ocx/img_es.exe que además está en castellano. Esta versión es la que se adjunta con el Win95 OS2 y el NT 4.0

    El Imaging es de libre distribución.

    Pedro Pascua se puede entrar en contacto con él en ped@fpress.com