PDA

Ver la Versión Completa : Evento Codigo de barras


Mary Carmen G.
04-08-2008, 19:18:56
Hola buenos dias:
Tengo un form donde se podra capturar informacion mediante un grid, necesito conectar un lector de codigo de barras a la computadora para que cuando escanee un codigo lo busque inmediatamente en el grid y posicione el cursor en esa celda.
Mis dudas son las siguientes.
* ¿Como puedo detectar cuando se escanea un codigo de barras o cuando se escribe por medio de teclado?
* No quiero que se escriba el codigo leido del lector solo que lo ubique en el grid. El escaner escribe el codigo donde este el focus, pero para lo que necesito el focus puede estar en cualquier componente del form.

Nota. El lector esta conectado al teclado, y no al puerto serial.

les agradezco mucho su ayuda.

2-D@monic
04-08-2008, 19:37:01
hasto donde manipulé lectores, cuando este escanea escribe la infro en un componente que esté focused y que puede recibir texto, como un TEdit. porqué no lo haces en un edit "oculto" y en su propiedad onchange codificas la búsqueda para el grid, lo puedes "ocultar" poniendole la propiedad left digamos -500, con esto no se verá en en form pero está activo, aunque esto es muy primitivo, no?.

Saludos.

Mary Carmen G.
04-08-2008, 19:43:25
Si, eso estaba haciendo inicialmente pero resulta que mi grid tambien esta en editable, cuando tengo mi cursor en una de sus celdas y paso el escaner pues el codigo de barras se escribe en la celda y no en el edit, ¿Hay un componente o algo que me permita leer en todo momento? Es buen aidea lo del edit oculto pero al pasar a otro componete pues tambien cambia el focus.


Saludos

2-D@monic
04-08-2008, 19:59:18
según lo que me indicas....... es necesario que el grid esté editable?, o solo muestra info.
puedes hacer un botón que le ponga el focus al edit.

Mary Carmen G.
04-08-2008, 20:08:05
Es necesario que el grid este en editable, puesto que es una pantalla de captura donde el usuario ingresara datos, lo que lea el escanner solo es para posicionar el cursor en la celda puesto que el grid puede tener mas de 1000 registros, tengo otra opcion que es mediante una busqueda en el grid, da CTRL + B y se muestra otro form que realiza la busqueda, pero tengo como requerimiento que tambien la busqueda la realize mediante el escaneo del codigo de barras y la busqueda sea automatica.

2-D@monic
04-08-2008, 20:14:56
creo que otra solución es que al momento de buscar desplegar una ventana pequeña la cual va a buscar el item con la captura y que se cierre autómáticamente cuando encuentre el objeto.

Saludos.

Mary Carmen G.
05-08-2008, 01:41:14
Si, voy a probar con eso, la ultima opcion que tengo es conseguirme un escanner con entrada al puerto serial, de esta manera el teclado y el escanner serian independientes y asi podria saber en que momento se escaneo el codigo.

gracias.

AzidRain
05-08-2008, 02:26:00
¿¿Y si el escaner no funciona, no está instalado o simplemente no se quiere usar?? No habrá forma de hacer la búsqueda??

No se entiende como tienes tu form...ojala pudieras poner una imagen de como se ve y así nos hacemos una mejor idea para ayudarte

Mary Carmen G.
05-08-2008, 17:21:39
La pantalla de captura de mi formulario es la que se encuentra adjunta, es para capturar conteos de un inventario fisico, tiene la opcion de buscar manualmente, pero tengo como requerimiento que tambien sea por medio de codigo de barras. La busqueda que realiza manualmente la hace sobre todas la columnas del grid, por ejemplo como se muestra en la imagen si deseo buscar el numero de folio (Columna folio de marbete) 10 la busqueda la realiza por todo el grid, y como resultado encuentra muchas coincidencias, la ventaja del escanner de codigo de barras seria que el codigo trae integrado el numero de folio de marbete y realiza la busqueda sobre esa columna nada mas, espero haberme explicado.

file:///C:/DOCUME%7E1/Mary/CONFIG%7E1/Temp/moz-screenshot.jpgfile:///C:/DOCUME%7E1/Mary/CONFIG%7E1/Temp/moz-screenshot-1.jpgfile:///C:/DOCUME%7E1/Mary/CONFIG%7E1/Temp/moz-screenshot-2.jpg

AzidRain
05-08-2008, 17:34:32
Mary, tienes que subir tu imagen a un sitio como Flickr o Imageshack (http://www.imageshack.us) para que desde ahi la ligues y la podamos ver todos.

Se me ocurre que en el campo donde capturas manualmente puedas validar si el número capturado contiene el folio del marbete y si es así tratarlo como escaneado. Ojala puedas corregir lo de la imagen, con eso creo que lo vamos a resolver..

Marbete...mm me suena...hace años manejé eso de inventarios físicos con Gis y Washington Inventory Service (wis) no se si sea para la misma cosa....

Mary Carmen G.
05-08-2008, 17:46:33
Ok, la pantalla de captura esta en este link. Los folios de los marbetes son numero consecutivos por lo que al hacer la busqueda encuentra muchas coincidencias ya que la busqueda la realiza en todo el grid, la opcion del escanner es para que mediante el codigo de barras solo busque sobre la columna de folio de marbete, pero cuando se escanee el codigo este no debe ingresarse en un text si no que solo se escanea e inmediatamente el cursor se debe posicionar en la celda del grid correcta.
gracias.

http://img93.imageshack.us/my.php?image=pantallabw8.jpg

waly2k1
05-08-2008, 17:59:26
El codigo de barras tiene longitud fija ???
Todos los codigos una vez leidos poseen un caracter CHR(13) al final
si capturas el evento keydown o keypress(prueba ambos) y comparas
la longitud del codigo o si encuentras este caracter haces la busqueda
pero no deberias tener el grid en estado editable para buscar, sino
mientras se está editando un registro y luego se realiza una busqueda,
cómo te queda el registro editado ???

En fin, espero poder serte util en algo
saludos y exitos!

Mary Carmen G.
05-08-2008, 19:13:04
Claro. el codigo de barras tiene 13 caracteres, ya lo intente en el evento OnKeypress del form, de hecho la propiedad keypreview del form la pongo a true, ya que lamentablemente el grid esta en editable.

Ahora como leo todo lo que leyo el escaner en el keypress si el evento se dispara cada vez por un solo caracter?

gracias

waly2k1
05-08-2008, 20:19:53
Ajam, en ese caso si o si necesitas un
cuadro de texto, del tipo <F3>-Busqueda
para poder capturar el codigo ingresado

Una vez capturado el codigo preguntas si el caracter
leido es 13, quiere decir que llegó al final, o bien si posee
13 digitos el texto, disparas la busqueda.

Bueno, espero puedas solucionarlo de la manera mas simple
posible.
Walter

AzidRain
05-08-2008, 20:49:23
Con la imagen parece que se entiende mejor, veamos.

La ventana de busqueda es la que utilizas para buscar escribiendo, cuando le das aceptar te busca en CUALQUIER columna del grid...para que esta ventanita aparezca presionas antes una tecla o botón.

Lo que quieres es que sin presionar ese boton escanees algo y tu aplicación vaya al marbete que escaneaste.

Si esto es así como lo entendí hay que hacer esto:

Meter un onkeypress en el form y activar el form_preview para que tu formulario procese primero cualquier teclazo, luego:

Si la tabla a la que está conectado el grid está en modo edición quiere decir que estás escribiendo algo, entonces dejamos pasar el caracter capturado normalmente.

Si esta en modo browse entonces quiere decir que no estas modificando nada, guardamos el caracter en una cadena y tomamos el siguiente caracter.

Repetir
Tomar el caracter detectado
Si es un numero
aumentarlo a la cadena previa
borrar el buffer (no pasarlo a los demás controles)
FinSI
Si no es un numero y no se han leido los n caracteres del código
borrar la cadena
pasar el caracter a los demás controles.
Salir del bucle
FinSi
Hasta (caracter es #13 y longitud cadeda = longitud codigo)

Si longitud cadena= longitud codigo
buscar cadena en campo folio
posicionar grid y darle el foco
Fin Si

Mary Carmen G.
05-08-2008, 21:03:19
AzidRain me has entendido perfectamente, en seguida probare el codigo en el evento keypress.

AzidRain
05-08-2008, 22:06:54
Va a ser una chambita algo pesadona porque tienes que procesar cada tecla que pase por el formulario. La única forma de saber si fue escaneada es que logres detectar la cadena de caracteres que manda el escaner, en este caso son 13 caracteres + el #13 (enter). Lo único que hay que cuidar es que el grid NO esté en modo edición, de manera que si está en modo de edición los caracteres escaneados simplemente se ignoran y ni siquiera se pasan al resto de los procesos.

Angel Fernández
05-08-2008, 22:37:52
Disculpad si os molesto, pero me surge una pregunta al ver la captura de pantalla de Mary Carmen G. ¿Qué componente grid utilizas? Lo digo porque me interesa saber cómo se hace para agrupar las columnas Peso, Piezas y Personal en 1er conteo, 2º conteo, etc.

Mary Carmen G.
05-08-2008, 22:49:07
El grid que utilizo se llama AdvStringgrid en la pagina http://www.tmssoftware.com/site/gridpack.asp puedes encontrar unos triales segun el delphi que estes utilizando, la verdad esta muy completo y visualmente esta mucho mejor que el grid de delphi, la funcion que utilizo para agrupar celdas se llama MergeCells(); dentro de la misma pagina puedes bajarte varios ejemplos, estan muy entendibles.

Saludos.

Angel Fernández
06-08-2008, 09:06:36
Muchas gracias Mary Carmen. Ya le echo un vistazo.