ENDFOR
Pero, ¿qué pasa realmente en ese FOR?
Veamos: Con SET ESCAPE ON
- Se ejecuta el primer KEYBOARD
- El WAIT WINDOW captura la tecla ESC, y somo SET ESCAPE es ON sale el cuadro de diálogo de "Cancel, Suspend, Ignore" y el sistema queda en estado de espera hasta que elijas una opción
- Si ignoramos (tecla "I") vuelve a salir este mensaje 2 veces más, pero el WAIT WINDOW no se ve.

Ahora veamos con SET ESCAPE OFF
- Se ejecuta el primer KEYBOARD
- El wait window captura la tecla ESC, pero como SET ESCAPE es OFF solo cierra el mensaje y sigue
- El WAIT WINDOW no se ve
Como ves, ese código con SET ESCAPE OFF no hace nada, ya que la tecla ESC que ponés en el buffer la lees inmediatamente con el WAIT WINDOW
Solución alternativa: Usar ON ESCAPE <comando> y dejar SET ESCAPE ON
Por ejemplo:
ON ESCAPE DO SALIR
SET ESCAPE ON
KEYBOARD "{ESC}" CLEAR
RETURN
PROCEDURE SALIR
ON ESCAPE
CLEAR EVENTS
QUIT
ENDPROC
Realmente este programa solo te sirve para ver como funciona lo de poner ESC en el buffer de teclado y leerlo con el ON ESCAPE para salir, pero en la realidad ese ESC es el que presionaría el usuario en una pantalla cualquiera para salir del sistema, ya que la rutina de SALIR se encarga de cerrarlo.
Los estados de espera (IDLE) del sistema se producen en estos casos:
- Cuando se muestra un messagebox con una opción para seleccionar
- Cuando se muestra un form de ingreso de datos con textbox u otro campo
- Cuando ocurre un error no controlado (y por tanto muestra un messagebox con el error y alguna opción para elegir)
- Cuando se ejecuta DOEVENTS
- Cuando se ejecuta WAIT WINDOW sin NOWAIT
- Cuando se usa INKEY(valor_N)
- (habrá otro, pero no lo recuerdo ahora)
En todo caso, si no se fuerza un estado IDLE de espera, siempre se ejecutará primero el código de programa hasta la última instrucción ejecutable, y luego se leerá el buffer del teclado.
Espero que esto aclare un poco cómo funciona la lectura del buffer de teclado en Fox.
Saludos.-