INPUTMASK - ALFANUMERICO

HMG en Español

Moderator: Rathinagiri

Post Reply
User avatar
SALINETAS24
Posts: 667
Joined: Tue Feb 27, 2018 3:06 am
DBs Used: DBF
Contact:

INPUTMASK - ALFANUMERICO

Post 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.
Como dijo el gran pensador Hommer Simpson..., - En este mundo solo hay 3 tipos de personas, los que saben contar y los que no. :shock:
User avatar
Claudio Ricardo
Posts: 367
Joined: Tue Oct 27, 2020 3:38 am
DBs Used: DBF, MySQL, MariaDB
Location: Bs. As. - Argentina

Re: INPUTMASK - ALFANUMERICO

Post 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.
Corrige al sabio y lo harás más sabio, Corrige al necio y lo harás tu enemigo.
WhatsApp / Telegram: +54 911-63016162
User avatar
andyglezl
Posts: 1461
Joined: Fri Oct 26, 2012 7:58 pm
Location: Guadalajara Jalisco, MX
Contact:

Re: INPUTMASK - ALFANUMERICO

Post by andyglezl »

Con INPUTMASK "AAAAAAAAA9999" no te funciona ??
Andrés González López
Desde Guadalajara, Jalisco. México.
User avatar
SALINETAS24
Posts: 667
Joined: Tue Feb 27, 2018 3:06 am
DBs Used: DBF
Contact:

Re: INPUTMASK - ALFANUMERICO

Post 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.
Como dijo el gran pensador Hommer Simpson..., - En este mundo solo hay 3 tipos de personas, los que saben contar y los que no. :shock:
arturoorta
Posts: 16
Joined: Fri Jan 25, 2013 8:19 pm
DBs Used: DBF,MySQL,MariaDB
Location: México

Re: INPUTMASK - ALFANUMERICO

Post 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.
Attachments
h_textbox.zip
(6.32 KiB) Downloaded 96 times
arturoorta
Posts: 16
Joined: Fri Jan 25, 2013 8:19 pm
DBs Used: DBF,MySQL,MariaDB
Location: México

Re: INPUTMASK - ALFANUMERICO

Post 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.
User avatar
AUGE_OHR
Posts: 2117
Joined: Sun Aug 25, 2019 3:12 pm
DBs Used: DBF, PostgreSQL, MySQL, SQLite
Location: Hamburg, Germany

Re: INPUTMASK - ALFANUMERICO

Post 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()
have fun
Jimmy
User avatar
andyglezl
Posts: 1461
Joined: Fri Oct 26, 2012 7:58 pm
Location: Guadalajara Jalisco, MX
Contact:

Re: INPUTMASK - ALFANUMERICO

Post 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
Andrés González López
Desde Guadalajara, Jalisco. México.
Post Reply