Necesito darle a un get el comportamiento de esperar a que el usuario termine de teclear para lanzar un proceso ( en este caso búsqueda ), en resumen, hacer algo similar a las capturas de datos de las búsquedas en muchos formularios web.
He montado este código que me funciona bien para lo que quiero hacer, pero no sé si Fivewin ya lleva algo que lo hace. En el caso de que ya lo lleve la propia librería, para utilizarlo nativamente y no reinventar la rueda.
- Code: Select all Expand view
- #include 'fivewin.ch'
Static nSeconds := 0
Static lChanged := .F.
Function Main()
Local oDlg
Local oGet
Local oSAy
Local cVar := Space( 10 )
nSeconds := Seconds()
DEFINE DIALOG oDlg;
SIZE 400,200
@1,1 GET oGet;
VAR cVar;
SIZE 90,13;
OF oDlg;
ON CHANGE ( nSeconds := Seconds(), lChanged := .T.);
ACTION Buscar( oGet, oSay)
@2,1 SAY oSAy;
PROMPT 'Escribe texto a buscar (mínimo 3 letras)';
OF oDlg
ACTIVATE DIALOG oDlg CENTERED ON INIT TimerInit( oDlg,oGet, oSay )
Return ( Nil )
Static Function TimerInit( oDlg,oGet, oSay)
DEFINE TIMER oTimer;
INTERVAL 1000;
OF oDlg;
ACTION TimerAction( oGet, oSay )
ACTIVATE TIMER oTimer
Return ( Nil )
Static Function TimerAction( oGet, oSay )
If lChanged .And.;
Seconds() - nSeconds > 1 .And.;
Len(Alltrim(oGet:cText)) > 2
Buscar( oGet, oSay )
Endif
Return ( Nil )
Static Function Buscar( oGet, oSay )
oSay:SetText(Time() + ' Resultados de la búsqueda: ' + Alltrim(oGet:cText) )
lChanged := .F.
Return ( Nil )
El resultado es el siguiente:
Gracias y salud!