Page 1 of 1
ON CHANGE de GET active BUTTON
Posted: Thu Apr 30, 2009 2:44 pm
by fusion
Saludos,
Tengo la siguiente situacion...
LOCA cId:= SPAC(10), cPassword:= SPAC(10)...
@ 74,180 GET cId PIXEL ON CHANGE oBtn:Refresh()
@ 85,180 GET cPassword PASSWORD PIXEL ON CHANGE oBtn:Refresh()
@ 102, 85 BUTTON oBtn PROMPT '&Ingresar' WHEN ( !EMPTY( cId ) .AND. !EMPTY( cPassword ) ) ACTION ( ValidInfo( cId, cPassword ) )
...
Sucede que el boton oBtn inicia desactivado porque cId y cPassword estan vacios, pero se escribe en cId y se empieza a escribir en cPassword y no he podido hacer que se active o desactive oBtn a medida que va cambiando cPassword o cId, he probado cambiando el ON CHANGE de los GET por ( oBtn:Refresh(), .T. ), ( oDlg:Refresh(), .T. ), ( SysRefresh(), .T. ), etc... y nada.... solo se activa oBtn cuando el GET bien sea de cId o cPassword pierden el foco, por lo tanto mi consulta es...
QUE DEBO PONER EN EL ON CHANGE DEL GET PARA QUE VAYA ACTUALIZANDO LA INFORMACION DEL BUTTON ?
Gracias por sus aportes...
Re: ON CHANGE de GET active BUTTON
Posted: Thu Apr 30, 2009 3:43 pm
by vlmsoft
Hola Jair,
Prueba con oBtn:Enable().
En el siguiente ejemplo se activa el boton cuando se ha validado el password:
.....
@ 74,180 GET cID PIXEL VALID TuFuncionValidID(...)
@ 85,180 GET cPassword PIXEL VALID IF( TuFuncionValidPassword(...),oBtn:Enable(),MsgInfo("Error en password") )
.....
Un saludo.
Re: ON CHANGE de GET active BUTTON
Posted: Thu Apr 30, 2009 4:57 pm
by fusion
Gracias por tu aporte,
efectivamente el oBtn:enable() activa el boton, pero no es la idea a la que quiero llegar...
Imagina que tienes un GET en el que el usuario va escribiendo y necesitas que un boton, un say, o cualquier control muestre, actue, se active, etc... en medida de _ que vayan sucediendo en el get sin abandonarlo...
Hay algo que sucede cuando el GET pierde el foco, que evalua el WHEN del boton y lo activa, ese algo es lo que quiero hacer para activar el boton del ejemplo...
(He estado probando algo con oBtn:aEvalWhen(), oDlg:aEvalWhen(), pero aun no he podido) seguire intentando y esperando sus aportes
Gracias de nuevo,
Re: ON CHANGE de GET active BUTTON
Posted: Thu Apr 30, 2009 5:34 pm
by Willi Quintana
Hazlo asi:
REDEFINE BTNGET oBusGlob ;
VAR cBusGlob ;
ON CHANGE (oBusGlob:Assign(), ; // actualiza el buffer a la variable propia
EVAL(XXX), oBotonx:Enable(), oNoseQue:Show()........... ) // lego del Assign pones lo que desees o evaluas el valor de la variable....
Salu2
Re: ON CHANGE de GET active BUTTON
Posted: Thu Apr 30, 2009 5:38 pm
by Willi Quintana
O tomando tu ejemplo
oBtn:Disable()
@ 74,180 GET cId PIXEL ON CHANGE (oBtn:Assign(), oBtn:Enable(), oBtn:Refresh() )
@ 85,180 GET cPassword PASSWORD PIXEL ON CHANGE (oBtn:Assign(), oBtn:Enable(), oBtn:Refresh() )
@ 102, 85 BUTTON oBtn PROMPT '&Ingresar' WHEN ( !EMPTY( cId ) .AND. !EMPTY( cPassword ) ) ACTION ( ValidInfo( cId, cPassword ) )
...
Salu2
Re: ON CHANGE de GET active BUTTON
Posted: Thu Apr 30, 2009 6:20 pm
by fusion
Saludos Willy y muchas gracias por tu contribucion...
Pero lamento decirte que no existe el metodo que mencionas para los botones... oBtn:Assign() me salio el error (Error description: Warning BASE/1004 Message not found: TBUTTON:ASSIGN)
He estado probando con...
@ 85,180 GET cPassword OF oDlg PIXEL PASSWORD ON CHANGE ( oBtn:aEvalWhen(), oDlg:aEvalWhen(), UpdateWindow(), MsgInfo( 'Probando' ) )
funciona, siempre y cuando no le quite el MsgInfo(), y lo otro que tiene malo es que activa el boton al digitar el segundo caracter, y si el usuario borra con la tecla Retroceder [BackSpace], cuando borra el primer caracter sigue activo el boton, tienen que presionar otro Retroceder para que vuelva a inactivarse el boton...
Bueno, seguire investigando y en espera de sus aportes.
Gracias de nuevo
Re: ON CHANGE de GET active BUTTON
Posted: Thu Apr 30, 2009 7:02 pm
by QAZWSX2K
YO QUE TU LE QUITARA ENTONCES EL MSGINFO Y LE PUSIERA UN SYSREFRESH()
Re: ON CHANGE de GET active BUTTON
Posted: Thu Apr 30, 2009 7:55 pm
by ADBLANCO
prueba con:
oDlg:AEvalWhen() // evaluar los when en un dialogo
Re: ON CHANGE de GET active BUTTON
Posted: Thu Apr 30, 2009 7:56 pm
by Willi Quintana
UPs,, tienes razon,,, deberia ir asi:
oBtn:Disable()
@ 74,180 GET oGetx VAR cId PIXEL
@ 85,180 GET oPass VAR cPassword PASSWORD PIXEL ON CHANGE (oPass:Assign(), If(cld = xxx .AND. cPasword = yyy, oBtn:Enable(), oBtn:DIsable()), oBtn:Refresh() )
@ 102, 85 BUTTON oBtn PROMPT '&Ingresar' WHEN ( !EMPTY( cId ) .AND. !EMPTY( cPassword ) ) ACTION ( ValidInfo( cId, cPassword ) )
esto activaria el boton "ingresar" si se cumple la igualdad de las variables con xxx y con yyy
Salu2
Re: ON CHANGE de GET active BUTTON
Posted: Thu Apr 30, 2009 8:08 pm
by fusion
QAZWSX2K wrote:YO QUE TU LE QUITARA ENTONCES EL MSGINFO Y LE PUSIERA UN SYSREFRESH()
Ya lo habia probado de esta manera y no funciona... (Con SysRefresh() )
@ 85,180 GET cPassword OF oDlg PIXEL PASSWORD ON CHANGE ( oBtn:aEvalWhen(), oDlg:aEvalWhen(),
SysRefresh() )
Pero si lo hago de esta manera...
@ 85,180 GET cPassword OF oDlg PIXEL PASSWORD ON CHANGE ( oBtn:aEvalWhen(), oDlg:aEvalWhen(),
SysRefresh(), MsgInfo( ''Probando ) )
le pongo el MsgInfo() para verificar que se esta ejecutando el ON CHANGE, eso causa una salida y entrada al GET y ahi si actualiza el estado del boton... osea evalua oBtn:aEvalWhen() y oDlg:aEvalWhen()...
Gracias... y sigo probando y en espera de sugerencias...
Re: ON CHANGE de GET active BUTTON
Posted: Thu Apr 30, 2009 8:14 pm
by fusion
ADBLANCO wrote:prueba con:
oDlg:AEvalWhen() // evaluar los when en un dialogo
Gracias por tu aporte, pero ya lo habia probado... el ultimo codigo que puse que funciona con problemas es...
@ 85,180 GET cPassword OF oDlg PIXEL PASSWORD ON CHANGE ( oBtn:aEvalWhen(), oDlg:aEvalWhen(),
UpdateWindow(), MsgInfo( 'Probando' ) )
El UpdateWindow() lo he cambiado por SysRefresh() y no trabaja sino pongo el MsgInfo() de prueba para verificar la ejecucion del ON CHANGE del GET...
Ojala Antonio nos de una manito...
Gracias...
Re: ON CHANGE de GET active BUTTON
Posted: Fri May 01, 2009 2:43 am
by Daniel Garcia-Gil
Saludos...
Si logro entender tu problema, puedes intentar esto
Code: Select all
#include "fivewin.ch"
function main()
local oDlg
local cId := space( 10 )
local cPass := space( 10 )
local oBtn
define dialog oDlg pixel size 400,400
@ 01,01 Get oGetx var cId pixel of oDlg
@ 20,01 Get oGetP var cPass Password pixel of oDlg ;
on change( if( empty( oGetP:oGet:Buffer ), oBtn:Disable(), oBtn:Enable() ) )
@ 40,01 button oBtn prompt "OK" of oDlg pixel
oBtn:Disable()
activate dialog oDlg
return nil