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 los cambios 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 | Expand
#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