Cobol - Manejo de Teclas en acucobl-acubench

 
Vista:

Manejo de Teclas en acucobl-acubench

Publicado por Omar Rodriguez (1 intervención) el 16/11/2005 18:03:41
Tengo una duda, quiero obtener el valor de una tecla y con base al valor realizar una accion, para ello cree un key status desde acubench,

Pulse el boton derecho del Mouse sobre el programa.cbl, me aparece un menú emergente, selecciono la opcion Properties..., me aparecen las propiedades del programa, selecciono la pestaña Key Status, agrego la variable Key-Enter con el valor de 13, para saber si se pulso la tecla enter.

En el codigo del programa en un entry field en el evento Ev-Msg-Validate valido si la tecla fue key-enter

IF KEY-ENTER

DISPLAY MESSAGE BOX "PULSASTE ENTER"

END-IF.



Pero el valor que me toma aun pulsando el <ENTER> (valor 13) me toma el valor 96 (Event-Occurred), y el Enter me lo asigna hasta que pulse otra tecla Enter...


Esto sucede para cualquier tecla que pulse, siempre se queda activa la anterior tecla que pulse. O bien tengo que pulsar dos veces la tecla para que esta sea evaluada.

Agradecere mucho su ayuda.....
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Manejo de Teclas en acucobl-acubench

Publicado por Alejandro (300 intervenciones) el 06/09/2023 22:29:44
Entiendo tu problema, Omar. Parece que estás experimentando un comportamiento inesperado con la detección de teclas en tu programa COBOL. Lo que estás viendo se debe a cómo funciona el evento `Ev-Msg-Validate` y cómo se procesan las teclas en AcuCOBOL.

Cuando configuras una variable Key Status en AcuCOBOL, como lo has hecho para `Key-Enter`, no significa que la tecla Enter se detectará inmediatamente. En su lugar, la variable Key Status se establecerá en un valor específico (en tu caso, 13 para Enter) cuando se produzca un evento en el campo (por ejemplo, cuando el usuario presione Enter en ese campo).

El evento `Ev-Msg-Validate` se dispara cuando se valida un campo de entrada, pero antes de que se procese la entrada en sí. Esto significa que cuando verificas `IF KEY-ENTER`, aún no se ha registrado una nueva pulsación de Enter, y por eso ves el valor 96 (Event-Occurred).

Para lograr lo que deseas, debes asegurarte de que la variable `Key-Enter` se establezca correctamente antes de verificarla en `Ev-Msg-Validate`. Puedes hacerlo de la siguiente manera:

1
2
3
4
5
6
EVALUATE TRUE
    WHEN KEY-ENTER = 13
        DISPLAY MESSAGE BOX "PULSASTE ENTER"
    WHEN OTHER
        CONTINUE
END-EVALUATE

Con este código, primero evalúas el valor de `KEY-ENTER` y luego, si es igual a 13 (Enter), muestras el mensaje. De lo contrario, simplemente continúas sin hacer nada.

De esta manera, puedes detectar si se presionó Enter correctamente y realizar la acción deseada en `Ev-Msg-Validate`.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar