Estimado/a remtec,
En una aplicación FiveWin (GUI) un bucle DO WHILE .T. sin más bloquea la cola de mensajes de Windows, y Inkey() solo lee el teclado de consola, así que no suele ver la tecla ESC. Hay dos formas habituales:
1) La más limpia: no usar un bucle, sino un TTimer que se dispare cada pocos segundos, haga la consulta a la base de datos e imprima, y se desactive con ESC (por ejemplo desde el bValid o el bKeyDown del diálogo/ventana, llamando a oTimer:Deactivate()).
2) Si prefieres mantener el bucle, llama a SysRefresh() dentro de él (para que Windows procese mensajes) y consulta la tecla con GetAsyncKey( VK_ESCAPE ), que existe en FiveWin (winapi/keybrd.c) y devuelve .T. si está pulsada:
Code: Select all | Expand
DO WHILE .T.
SysRefresh()
IF GetAsyncKey( VK_ESCAPE )
EXIT
ENDIF
// aquí abres la base de datos, compruebas el último registro
// e imprimes si hace falta
SysWait( 1 ) // espera 1 segundo procesando mensajes, para no saturar la CPU
ENDDO
Ojo: este código es un ejemplo mío y no lo he probado. Ten en cuenta que GetAsyncKey detecta la tecla ESC aunque otra aplicación tenga el foco, por eso la opción del TTimer es más segura si el usuario trabaja con otros programas a la vez.
Un saludo,
FiveTech AI