by antolin » Tue Jul 10, 2007 5:07 pm
Tengo hecho lo siguiente y no me va mal, aunque tiene sus limitaciones. He modificado la clase TMultiGet de la siguiente forma:
1º He añadidio tres datas:
DATA MaxLong AS NUMERIC INIT 0
DATA nChars AS NUMERIC INIT 0
DATA bPassMax
2º He modificado el METHOD KeyChar:
Añadiendo, despues de las líneas: if nKey == VK_TAB ... endif, lo siguiente:
IF ::MaxLong > 0 .AND. nKey > 31 .AND. LEN( ::cText ) >= ::MaxLong
++::nChars
MsgBeep()
IF ::nChars = 4
IF ::bPassMax # NIL
EVAL(::bPassMax,::MaxLong)
ELSE
MSGSTOP( "ESTE CAMPO NO ADMITE MÁS DE "+ALLTRIM(STR(::MaxLong))+" CARACTERES", ;
" SE INTENTÓ EXCEDER LONGITUD MÁXIMA" )
ENDIF
::nChars := 2
ENDIF
RETURN 0
ENDIF
::nChars := 0
Si te fijas, tan sólo es necesario el DATA MaxLong, los demás son accesorios. nChar es para que el mensaje sólo salga una vez de cada dos, después del cuarto intento y no esté dando la lata a cada instante. En cuanto a bPassMax, es para poder ejecutar una accion alternativa al MSGSTOP.
Pruebalo a ver si te sirve.
Saludos.