La Web del Programador: Comunidad de Programadores
 
    Pregunta:  65386 - COMO LEER CODIGO DE BARRAS SIN PRESIONA ENTER
Autor:  Jose Luis
Tengo un programa en Fox pro 2.6 para ms-dos y leo un campo codigo
@ x,y get m.codigo pict '@! 99999999'
read <-- como hacerle aquí

lo que necesito es que el usuario NO presione la tecla Enter, si no que pase automatico al momento de encontrar ese registro

seek m.codigo
if found
proceso
else
salir
endif
Si alguien me puede dar una idea de la rutina a programar...hay comandos como LASTKEY o INKEY o READKEY...pero como las uso ?.

  Respuesta:  hancito2003
Hola.

Debo suponer que la variable de captura tiene la misma longitud del codigo que lees. Si no es asi, entonces ajustala al tamaño del codigo. No es necesario que tambien ajustes el tamaño de la captura en la tabla, solo en la variable. Luego, para que la variable no espere a que el usuario tenga que presionar enter, antes de la captura colocas SET CONFIRM OFF. Esto le indica al sistema que si la variable se llena no tenga que esperar confirmacion de entrada para saltar a la proxima captura.

Como hicimos cambios en la longitud de la captura, tambien tenemos que hacerlo en la forma de busqueda, agregando: seek str(m.codigo), esto para que la longitud de la variable no tenga que ver con la longitud del campo y que se eliminen los espacios en blanco en la busqueda. Aun asi, tambien utilizas otro proceso:

IF FOUND()
Proceso
ENDIF

Seria interesante ver el proceso que estas invocando, porque los procedimientos que invocas asi realizan una operacion automatica y solo se interrumpen a la espera de la intervencion del usuario, si tu lo decides, colocando WHITE, o GET ... READ. Si dentro de tu proceso colocas un GET, entonces deberia ser un GET con un READ condicionado. Esto, para que no se detenga a esperar llenar una variable, sino que dentro del proceso, seria algo asi:

PROCEDURE PROCESO
if .not. empty(m.codigo)
@x,y say DESCRIPCION
else
@x,y GET DESCRIPCION
READ
endif.

Esto considerando que los valores que llenen la variable ya esten predefinidos dentro del m.codigo y los valores consecuentes dentro de la DBF.

Espero te sea de ayuda.