Page 1 of 1

problemas al Controlar el escaner via ActiveX ocx

Posted: Tue Dec 23, 2008 5:45 pm
by jfafive
Hola,

Estoy usando una librería trial ocx para crear un dialogo que me permita controlar el escaner independientemente al software que trae.

He probado la siguiente secuencia de comandos:

Code: Select all

function Main()

   local _

   _ := TOleAuto():New( "csXImageTrial.ImageBox" )

   _:WaitForAcquire    := .t.
   _:UseTwainInterface := .f. // Evitamos que llame al software del escaner.

   _:SelectTWainDevice() // Seleccionamos el escaner a utilizar

   MsgInfo( "Before" )
   _:Acquire()  // escaneamos
   MsgInfo( "After" )

return nil
Cuando ejecuto este código, funciona bien, es decir, muestra el mensaje 'Antes', lueso escanea y finalmente, muestra 'Después'

Lo curioso es que si ejecuto esta misma secuencia asignada a un ACTION de un botón en mi diálogo de recurso, se produce la siguiente ejecución:

Muestra 'Antes', escanea y luego no muestra el mensaje 'Después'. Pero mi aplicación no se bloquea. sigue funcionando y puedes pulsar otros botones y salir del dialogo.

Al principio pensé que se trataba de la librería en sí, pero probé con otra librería muy similar que tambien usa activex y los resultados fueron los mismos.

En fín, que parece que hay algo que le molesta cuando ejecuto desde diálogo y no sé que hacer.

:cry:

Posted: Tue Dec 23, 2008 6:16 pm
by Antonio Linares
Javier,

Mira a ver si te sirve la libreria que hizo Rafa (thefull):

www.fivetechsoft.com/files/utilities/tscan32.zip

Posted: Tue Dec 23, 2008 7:13 pm
by RenOmaS
Experimenta utilizar lo siguiente:

Code: Select all

   Local oErr
...
   MsgInfo( "Before" )
   TRY
      _:Acquire()  // _ oErr
      MsgAlert( "Error: " + oErr:Operation + " -> " + oErr:Description )
   END
   MsgInfo( "After" ) 

Posted: Tue Dec 23, 2008 8:00 pm
by Rafael Clemente
Javier:
Yo utilizo csxImage y va muy bien. El truco está en abrirlo como ActiveX. Más o menos así:

Code: Select all

oImgBox := TActiveX():New(Self, "csXImageTrial.ImageBox")

//--- Y a partir de ahora, utiliza Do(), SetProp() y GetProp().  Así:

oImgBox:Do("SelectTwainDevice")
oImgBox:SetProp("WaitForAcquire", .t. )
oImgBox:SetProp("UseTwainInterface", .F.) // Evitamos que llame al software del escaner. 
oImgBox:Do("Acquire")
etc etc...
Antonio me ayudó mucho porque TActiveX tenía unas incompatibilidades que al final pudimos resolver (bueno; casi todo lo hizo él). Esto fue a finales de mayo, así que para que te funcione necesitarás la versión FWH 8.07 o posterior

Por cierto, la gente de csxImage también colaboró mucho, incluyendo unas funciones para manejo de colores, ya que con los datos OLE_COLOR originales no hubo forma de que funcionase. Espero que esto ayude. Feliz Navidad!

Rafael

Posted: Tue Dec 23, 2008 8:45 pm
by Antonio Linares
Aclarar que las incompatibilidades que se resolvieron fueron con el manejo de eventos :-)

Posted: Wed Dec 24, 2008 1:39 pm
by jfafive
Antonio, TScan32 fué la primera opción que estudié. Pero se me queda corto para lo que necesito.

RenOamS, buen intento y gracias. Pero las pruebas no han funcionado.

Rafa, como bien dices, necesitaré la versión FWH 8.07.

En fin, gracias por vuestros consejos. Os deseo una feliz noche buena.
Y no os paseis con la cominda. :lol: