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