Ver Mensaje Individual
  #3  
Antiguo 19-06-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Reputación: 22
andres1569 Va por buen camino
Hola:

Independientemente de que se conecten o no al mismo puerto, ambos generan el mismo tipo de mensaje windows, es decir como si fueran pulsaciones de teclado y así es como los recibe la aplicación (mensajes WM_KEYDOWN).

Parecerá algo engorroso pero la forma en que tengo implementado esto es mediante el evento OnMessage del TApplication (lo tengo en Delphi 4.0, si fuera un Delphi superior se utilizaría el componente ApplicationEvents). Dentro de ese código, coloco una llamada a GetTickCount cada vez que se recibe un caracter sospechoso (sólo cifras en mi caso) y comparo tiempos de recepción. Si el tiempo es inferior a 70 milésimas entre un caracter y otro, entiendo que es enviado por el scanner y anulo el mensaje para que no se propague; si no, interpreto que es el teclado (ése es el tiempo que calculo que un buen mecanógrafo no puede igualar). De esta forma, mientras van entrando caracteres en esos lapsos de tiempo voy almacenándolos y formando una cadena, hasta que llega el código de control (RETURN) o cualquier caracter retrasado en cuyo caso aborto la creación de la cadena y entiendo que es un "texto normal" (en ese caso hay que reenviarlo a la aplicación para que lo procese).

Puede sonar un poco a chapuza pero no encontré en su día mejor forma de hacerlo (si alguien lo ha hecho de otra forma ...) y funciona. Tal como lo tengo implementado, cuando se obtiene un código de barras completo, se lanza un Diálogo modal mostrándo el código para que el usuario pueda darse cuenta de que se ha leído, o por si se quiere verificar el número con el de la etiqueta, y a continuación se ejecuta la búsqueda en la Base de datos.

Si te interesa el código, dímelo, tendría que hacer algunos retoques y quitar partes que no te interesan.
__________________
Guía de Estilo
Responder Con Cita