LIMPIAR BUFFER TECLADO + COSAS RARAS
Posted: Thu Oct 15, 2020 4:16 pm
Hola os paso un código sencillo que hace cosas raras.
Se trata una petición de datos que se repetirá mientras el usuario no pulse la tecla ESC. "Es necesario hacerlo así".
Para lo cual defino una ventana, pido los datos y la cierro. Si el usuario no ha pulsado ESC vuelvo a generar la misma ventana..., para eso la tengo dentro de un DO WHILE.
En el primer campo tengo un ON LOSTFOCUS ya que necesitaría hacer unas comprobaciones, y en el último también tengo otro ON LOSTFOCUS para hacer otras comprobaciones y un ON ENTER para salir. Sencillo
COSAS RARAS.
1/ Cuando ejecutas el programa la primera vez "PANTALLA 1" funcionara bien, pero a partir de ese momento si haces más entradas de datos verás que la condición se ejecuta al finalizar la introducción del ultimo campo. SE EJECUTA DOS VECES. Pensé que sería por el BUFFER del teclado, he intentado borrarlo, pero no me ha servido de nada.
2/Otra cosa rara. Si hago un, es lógico pensar que se pierden todos los datos, y que cuando se vuelve a definir la ventana los campos se mostrarán en blanco...., PORQUE NO OCURRE.??
¿ Es posible que el comando "RELEASE" no lo limpie todo ?
Muy agradecido por vuestras respuestas y vamos a por una cervecita fresquita !!
Se trata una petición de datos que se repetirá mientras el usuario no pulse la tecla ESC. "Es necesario hacerlo así".
Para lo cual defino una ventana, pido los datos y la cierro. Si el usuario no ha pulsado ESC vuelvo a generar la misma ventana..., para eso la tengo dentro de un DO WHILE.
En el primer campo tengo un ON LOSTFOCUS ya que necesitaría hacer unas comprobaciones, y en el último también tengo otro ON LOSTFOCUS para hacer otras comprobaciones y un ON ENTER para salir. Sencillo
COSAS RARAS.
1/ Cuando ejecutas el programa la primera vez "PANTALLA 1" funcionara bien, pero a partir de ese momento si haces más entradas de datos verás que la condición
Code: Select all
ON LOSTFOCUS AccionInicial()
2/Otra cosa rara. Si hago un
Code: Select all
WIN_1.release
¿ Es posible que el comando "RELEASE" no lo limpie todo ?
Muy agradecido por vuestras respuestas y vamos a por una cervecita fresquita !!

Code: Select all
#include <hmg.ch>
FUNCTION Main
SET NAVIGATION EXTENDED
DEFINE WINDOW main ;
AT 1,1 ;
WIDTH 1020 ;
HEIGHT 735 ;
TITLE 'RARAS ' ;
MAIN
@ 10, 10 BUTTON Button_0 CAPTION "Pide datos" ACTION Rutina()
END WINDOW
Main.Center
Main.Activate
RETURN
STATIC PROC Rutina()
PRIVATE lSalir:=.T.
PRIVATE nPan:=0
DO WHILE lSalir
nPan++
DEFINE WINDOW WIN_1 at 10,10 width 300 height 200 MODAL
ON KEY ESCAPE ACTION (lSalir:=.f.,WIN_1.release)
@ 10,10 LABEL LB1 VALUE "Pantalla "+STR(nPan)
@ 40,10 textbox t1 VALUE " " width 100 ;
ON LOSTFOCUS AccionInicial()
@ 70,10 textbox t2 VALUE " " width 100
@ 100,10 textbox t3 VALUE " " width 100
@ 130,10 textbox t4 VALUE " " width 100 ;
ON LOSTFOCUS AccionFinal()
ON ENTER (HMG_CLEANLASTVIRTUALKEYDOWN(),WIN_1.release)
END WINDOW
Win_1.Center
ACTIVATE WINDOW Win_1
HMG_CLEANLASTVIRTUALKEYDOWN()
ENDDO
RETURN
STATIC PROC AccionInicial()
MSGBOX("Accion al abandonar 1er TEXTBOX")
return
STATIC PROC AccionFinal()
MSGBOX("Acción al abandonar ULTIMO")
return