Alguien sabe d alguna llmada para escanear y guardar un documento directamente desde un componente de UNIFACE??
Gracias
Escanear Documento
Re: Escanear Documento
Lo primero es el driver del scanner. Llamémoslo TWAIN (o WIA).
Tenemos un ordenador windows con Uniface, un escáner y el driver necesario para comunicarse con él.
Para que Uniface pueda hacer uso de las funciones del driver hay, al menos, tres opciones:
- COM (en la ayuda, Call-Out to COM)
- DLL (en la ayuda, Call-Out to 3GL)
- OCX Container
En la primera, es necesario hacer uso del /sti para crear una signature de las funciones ofrecidas por el COM.
/sti {/verbose} /mwr=com PathToTypeLibrary
/sti {/verbose} /mwr=com /pid ProgId{:Prefix}
Brujuleando en el regedit puedes encontrar el controlador del scanner e importarlo en Uniface. El driver debe tener un TypeLibrary definido para que Uniface pueda interactuar con él con este método. Aparecerá una o varias signatures con diferentes operaciones que corresponden a funciones de objeto externo.
El manejo del DLL del driver es similar aunque un poco más complejo. El ini debe contener una sección USER_3GL con la DLL. Además, debes conocer la función a llamar y los parámetros necesarios. Y en este punto hay dos opciones:
- usar $1, $2, $3... como parámetros y ejecutar la función con perform "funcion"
- definir una signtature cuya implementación sea "C Component", con la operación "funcion" y definiendo adecuadamente los parámetros. Entonces puedes hacer activate "SCAN".funcion(par1, par2, ...)
En los dos primeros, una vez estén bien definidas las signatures, podrás interactuar con el driver a base de llamadas a sus funciones: selecciona driver, defino los parámetros del scaneo, scanear...
La tercera es crear un form e incluirle un campo OCXContainer y elegir el que corresponde al software del scanner. El recuadro definido del form será manejado por el scanner.
Mucha prueba y error.
Tenemos un ordenador windows con Uniface, un escáner y el driver necesario para comunicarse con él.
Para que Uniface pueda hacer uso de las funciones del driver hay, al menos, tres opciones:
- COM (en la ayuda, Call-Out to COM)
- DLL (en la ayuda, Call-Out to 3GL)
- OCX Container
En la primera, es necesario hacer uso del /sti para crear una signature de las funciones ofrecidas por el COM.
/sti {/verbose} /mwr=com PathToTypeLibrary
/sti {/verbose} /mwr=com /pid ProgId{:Prefix}
Brujuleando en el regedit puedes encontrar el controlador del scanner e importarlo en Uniface. El driver debe tener un TypeLibrary definido para que Uniface pueda interactuar con él con este método. Aparecerá una o varias signatures con diferentes operaciones que corresponden a funciones de objeto externo.
El manejo del DLL del driver es similar aunque un poco más complejo. El ini debe contener una sección USER_3GL con la DLL. Además, debes conocer la función a llamar y los parámetros necesarios. Y en este punto hay dos opciones:
- usar $1, $2, $3... como parámetros y ejecutar la función con perform "funcion"
- definir una signtature cuya implementación sea "C Component", con la operación "funcion" y definiendo adecuadamente los parámetros. Entonces puedes hacer activate "SCAN".funcion(par1, par2, ...)
En los dos primeros, una vez estén bien definidas las signatures, podrás interactuar con el driver a base de llamadas a sus funciones: selecciona driver, defino los parámetros del scaneo, scanear...
La tercera es crear un form e incluirle un campo OCXContainer y elegir el que corresponde al software del scanner. El recuadro definido del form será manejado por el scanner.
Mucha prueba y error.
$status=0 ; se acabaron los problemas
Re: Escanear Documento
Muchas gracias, lo intentaré.
Re: Escanear Documento
Muchas gracias, alguien conoce algún programa en Windows que pueda utilizar y la forma de hacer las llamadas.??
Re: Escanear Documento
Hola
Acabo de probar. He buscado en el regedit rastros del WIA y acabé importando "WIA.CommonDialog.1" (/sti /mwr=com /pid WIA.CommonDialog.1).
Creó varias signatures en Uniface.
Dentro de un form escribí este código
variables
handle VH1,VH2
endvariables
debug
newinstance "COMMONDIALOG", VH1
VH1->showacquireimage(VH2, 1, 0, 0, "", "T", "T", "F") ;ver en la web de Microsoft los parámetros
Y en el debug encuentro que realmente se puso en contacto con el COM para decirme lo que ya sabía, que no tengo ningún escáner conectado.
ICCDRV-COM-ERR Error with ICC system occurred, The COM method "ShowAcquireImage" threw an OLE exception: HRESULT=0x80210015, description="No hay disponible ningún dispositivo WIA del tipo seleccionado.", source="WIA.CommonDialog.1": COM error 0x80210015, described as "Unknown error 0x80210015" (ICC system status: <-2145320939>)"
Que es un mensaje muy similar al que obtengo directamente con windows al lanzar el wiaacmgr.exe
He intentado con una cámara de fotos pero Windows no me la reconoce como scanner. No puedo probar más.
Leyendo la documentación de Microsoft, hay bastantes métodos. El del diálogo me pareció el más sencillo pero intuyo problema con el tipo. Según microsoft, este método devuelve directamente la imagen escaneada pero Uniface lo ha identificado com handle. Habría que ver qué devuelve realmente y ajustar el tipo en la signature.
La otra forma era a través de un OCX, que suelen ser de pago.
Acabo de probar. He buscado en el regedit rastros del WIA y acabé importando "WIA.CommonDialog.1" (/sti /mwr=com /pid WIA.CommonDialog.1).
Creó varias signatures en Uniface.
Dentro de un form escribí este código
variables
handle VH1,VH2
endvariables
debug
newinstance "COMMONDIALOG", VH1
VH1->showacquireimage(VH2, 1, 0, 0, "", "T", "T", "F") ;ver en la web de Microsoft los parámetros
Y en el debug encuentro que realmente se puso en contacto con el COM para decirme lo que ya sabía, que no tengo ningún escáner conectado.
ICCDRV-COM-ERR Error with ICC system occurred, The COM method "ShowAcquireImage" threw an OLE exception: HRESULT=0x80210015, description="No hay disponible ningún dispositivo WIA del tipo seleccionado.", source="WIA.CommonDialog.1": COM error 0x80210015, described as "Unknown error 0x80210015" (ICC system status: <-2145320939>)"
Que es un mensaje muy similar al que obtengo directamente con windows al lanzar el wiaacmgr.exe
He intentado con una cámara de fotos pero Windows no me la reconoce como scanner. No puedo probar más.
Leyendo la documentación de Microsoft, hay bastantes métodos. El del diálogo me pareció el más sencillo pero intuyo problema con el tipo. Según microsoft, este método devuelve directamente la imagen escaneada pero Uniface lo ha identificado com handle. Habría que ver qué devuelve realmente y ajustar el tipo en la signature.
La otra forma era a través de un OCX, que suelen ser de pago.
$status=0 ; se acabaron los problemas