Page 1 of 1

INPUTMASK - ALFANUMERICO

Posted: Wed Apr 06, 2022 8:25 am
by SALINETAS24
Hola a todos
Esto es lo que tengo en la documentación...,

Code: Select all

InputMask String (Numeric Textbox):

      9 Displays digits
      $ Displays a dollar sign in place of a leading space
      * Displays an asterisk in place of a leading space
      . Specifies a decimal point position
      , Specifies a comma position

InputMask String (Non-Numeric Textbox):

      9 Digits
      A Alphabetic Characters
      ! Converts an alphabetic character to uppercase
Pero que pasa cuando queremos crear una mascara para contener caratereres ALFANUMERICOS (aAbBcC...., 123...) y que tenga una determinada longitud. En Clipper creo recordar teniamos el "#" que nos permitia crear campos de una determinada longitud y con esas caracteristicas.

El problema es que cuando utilizo un TEXTBOX alfanumerico con MAXLENGTH 13, y cuyo dato será para introducir una clave, el resultado que obtengo no tiene una longitud de 13, tiene una longitud de los caracteres que he introducido por lo que tengo que estar rellenado los espacios.

¿no hay ninguna máscara en HMG..?

Gracias

He visto que ya se reporto en su dia, pero desconozco si posteriormente se realizo alguna aportación.

http://www.hmgforum.com/viewtopic.php?f ... RICO#p2607

Lo dicho, gracias a todos y vamos con una cervecita bien fresquita.

Re: INPUTMASK - ALFANUMERICO

Posted: Wed Apr 06, 2022 2:57 pm
by Claudio Ricardo
Hola Salinetas, Yo fijo el MaxLenght (a 13 en tu caso) y luego uso esta función:

Code: Select all

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Función Validate () Comprueba si los caracteres de cCadena están validados por cChars (retorna .T.)
// Uso Validate (cName,"abcdefghijklmnñopqrstuvwxyz0123456789") Si cName = a-z y 0-9 retorna .T.

Function Validate (cCadena,cChars)

LOCAL cValid := .T.
LOCAL i

	For i = 1 To Len (cCadena)
	
		If ! Lower ( SubStr (cCadena,i,1)) $cChars
		
			cValid := .F.
			
		EndIf
		
	Next

Return cValid
Se puede poner en un CodeBlock en OnChange para que sea como " Valid " en los Get de Cli**er
y lo termino con: cVar := Padl ( cVar, 13, "0") para rellenar con ceros (o lo que necesites) a la izquierda.

Re: INPUTMASK - ALFANUMERICO

Posted: Wed Apr 06, 2022 3:35 pm
by andyglezl
Con INPUTMASK "AAAAAAAAA9999" no te funciona ??

Re: INPUTMASK - ALFANUMERICO

Posted: Wed Apr 06, 2022 4:53 pm
by SALINETAS24
Hola Claudio,
Claudio Ricardo wrote: Wed Apr 06, 2022 2:57 pm Hola Salinetas, Yo fijo el MaxLenght (a 13 en tu caso) y luego uso esta función:
..../...[
Se puede poner en un CodeBlock en OnChange para que sea como " Valid " en los Get de Cli**er
y lo termino con: cVar := Padl ( cVar, 13, "0") para rellenar con ceros (o lo que necesites) a la izquierda.
Efectivamente la solución pasa por emplear una funcion, HMG carece de mascara para admitir cualquier tipo de caracter.

Hola Andy
andyglezl wrote: Wed Apr 06, 2022 3:35 pm Con INPUTMASK "AAAAAAAAA9999" no te funciona ??
A mi no me funciona, en el caso que tu indicas solo admite letras en las 9 primeras posiciones y numeros en las 4 ultimas, y yo quiero ponerlos en cualquier lugar.

En fin, seguiremos usando PAD.

Gracias por vuestra colaboración y vamos con una "serveseta" virtual.

Re: INPUTMASK - ALFANUMERICO

Posted: Wed Apr 06, 2022 7:55 pm
by arturoorta
Buenas tardes.

Yo tenía el mismo problema y modifiqué el código fuente de HMG para que acepte la "X" en INPUTMASK. Ahí te paso el programa modificado. Solo hay que recompilar las librerias HMG.

Se usa la "X" igual que en el Get de Clipper. Ejemplo INPUTMASK "!!!!999999XXX", esto es las primeras cuatro covertir a mayúscula, del 5 al 10 solo números y las tres últimas posiciones cualquier caracter. Espero te sirva. Saludos desde Chihuahua, México.

PDTA. ¿Podrán incluir esto en las siguientes revisiones de HMG? Solo es una sugerencia.

Re: INPUTMASK - ALFANUMERICO

Posted: Wed Apr 06, 2022 8:19 pm
by arturoorta
Ok. Ya revisé el problema que mencionan. Cuando lees el valor del Textbox siempre te quita los espacios sobrantes sin importarle el Maxlenght o InputMask. Por ejemplo:

Textbox oTxtBox Value Space(5) InputMask "!!!!!"

Si el usuario teclea "ABC" y hacemos lo siguiente:

cCode:=oWindow.oTxtBox.Value

cCode queda con el siguiente valor "ABC" eliminando los dos espacios restantes del valor original "ABC " y provocando que si hacemos una busqueda donde necesitamos que el valor sea exactamente igual, por ejemplo:

Select XDATA
DBSeek(cCode)
While cCode==XDATA->CODEFIELD .AND. !EoF()
Skip 1
Enddo

No funcione. Ya que "ABC" NO ES EXACTAMENTE IGUAL A "ABC ".

La solución sería modificar el código de TextBox para que no recorte los espacios sobrantes si hay un Maxlenght o un InputMask de por medio.

Esa es mi humilde opinión.

Re: INPUTMASK - ALFANUMERICO

Posted: Wed Apr 06, 2022 10:19 pm
by AUGE_OHR
hi,

you are right when use "=="

instead of

Code: Select all

While cCode==XDATA->CODEFIELD .AND. !EoF()
i would recommend to use

Code: Select all

While XDATA->CODEFIELD = cCode .AND. !EoF()

Re: INPUTMASK - ALFANUMERICO

Posted: Thu Apr 07, 2022 3:15 am
by andyglezl
SALINETAS24 wrote: Wed Apr 06, 2022 4:53 pm
A mi no me funciona, en el caso que tu indicas solo admite letras en las 9 primeras posiciones y numeros en las 4 ultimas,
(Creo que así funciona el INPUTMASK)
y yo quiero ponerlos en cualquier lugar. :shock:

Simple TEXTBOX:

@ <nRow>, <nCol>
TEXTBOX <ControlName> OF <ParentWindowName> HEIGHT <nHeight> WIDTH <nWidth> VALUE <cValue> ;
MAXLENGTH <nInputLength> ON CHANGE Valida() ON LOSTFOCUS Valida() ON ENTER Valida()
:
:
:
Function Valida()
:
: Lo que quieras validar...
:
RETURN