TEXTBOX - INPUTMASK

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:

TEXTBOX - INPUTMASK

Post by SALINETAS24 »

Hola, una curiosidad.
He puesto un código de los samples donde en el TEXTBOX 5 displayo la variable que he tomado.
Antes, en clipper.., una variable la podíamos pedir o imprimir bajo un formato, pero el valor de la variable no sufría transformación.
Tengo un fichero con un campo código de 6 dígitos, siendo los 2 primeros el año y los 4 restrantes un orden secuencial. Algo así "980001", pero para que el usuario lo tenga más facil, en el TEXTBOX le pongo un INPUTMASK "99/9999" y aquí es donde viene el lío.
El valor que toma el TEXTBOX es "98/00001" con la barra y todo, es más, si la variable es el campo código de una DBF definido con 6 digitos me toma "98/0000" .., se me pierde el último número., por lo que tengo que aumentar/modificar el campo DBF.

Eso es así en HMG, la variable del TEXTBOX asume la MASCARA...????
Hay alguna forma de obtener el valor, independientemente de la máscara que se use.
Imaginate que tomas el codigo de una Tarjeta de Credito, o el IBAN de una cuenta corriente. Son 20 dígitos y les puedes poner una mascara, PERO para grabar ese dato no necesitas la máscara...
Digo yo.

Igual no me explico correctamente..

Gracias y vamos con esa cervecita.

Code: Select all

/*
* HMG InputMask Demo
* (c) 2003 Roberto lopez
*/

/*

	InputMask String For Character TextBox

        9	Displays digits
	!       Displays Alphabetic Characters (uppercase)
	A	Displays Alphabetic Characters

	(All other characters are included in text in the position indicated 
	by the mask)

	Format String

	No Format Stirng Is Allowed For Character TextBox

*/

#include "hmg.ch"

Function Main

	DEFINE WINDOW Form_1 ;
		AT 0,0 ;
		WIDTH 450 ;
		HEIGHT 250 ;
		TITLE 'InputMask Demo' ;
		MAIN 

		DEFINE MAIN MENU
			POPUP 'Test'
				ITEM 'Get Text_1 Value' ACTION MsgInfo (Form_1.Text_1.Value)
				ITEM 'Set Text_1 Value' ACTION Form_1.Text_1.Value := 'GEW-57927/X'
				ITEM 'Set Text_1 Focus' ACTION Form_1.Text_1.SetFocus
				SEPARATOR
				ITEM 'Get Text_2 Value' ACTION MsgInfo (Form_1.Text_2.Value)
				ITEM 'Set Text_2 Value' ACTION Form_1.Text_2.Value := '123.456.789-12' 
				ITEM 'Set Text_2 Focus' ACTION Form_1.Text_2.SetFocus
				SEPARATOR
				ITEM 'Get Text_3 Value' ACTION MsgInfo (Form_1.Text_3.Value)
				ITEM 'Set Text_3 Value' ACTION Form_1.Text_3.Value := '12.345.678' 
				ITEM 'Set Text_3 Focus' ACTION Form_1.Text_3.SetFocus
				SEPARATOR
				ITEM 'Get Text_4 Value' ACTION MsgInfo (Form_1.Text_4.Value)
				ITEM 'Set Text_4 Value' ACTION Form_1.Text_4.Value := '1234-1234-1234-1234' 
				ITEM 'Set Text_4 Focus' ACTION Form_1.Text_4.SetFocus
				SEPARATOR
				ITEM 'Get Text_5 Value' ACTION MsgInfo (Form_1.Text_5.Value)
				ITEM 'Set Text_5 Value' ACTION Form_1.Text_5.Value := 'AA-999/9(A-AAA)'   
				ITEM 'Set Text_5 Focus' ACTION Form_1.Text_5.SetFocus
				SEPARATOR
				ITEM 'Get Text_6 Value' ACTION MsgInfo (Form_1.Text_6.Value)
				ITEM 'Set Text_6 Value' ACTION Form_1.Text_6.Value := '(253) 427 - 7362'   
				ITEM 'Set Text_6 Focus' ACTION Form_1.Text_6.SetFocus

			END POPUP
		END MENU

		@ 10,10 LABEL label_1 ;
			VALUE 'Simple Code:' ;
			WIDTH 100

		@ 10,120 TEXTBOX text_1 ;
			VALUE 'ZFA-17529/Z' ;
			INPUTMASK 'AAA-99999/A'

		@ 10,290 LABEL label_1b ;
			VALUE 'AAA-99999/A' 
			WIDTH 100

		@ 40,10 LABEL label_2 ;
			VALUE 'Brazil ID:' ;
			WIDTH 100 

		@ 40,120 TEXTBOX text_2 ;
			VALUE '123.456.789-12' ;
			INPUTMASK '999.999.999-99' 

		@ 40,290 LABEL label_2b ;
			VALUE '999.999.999-99' 

		@ 70,10 LABEL label_3 ;
			VALUE 'Argentina ID:' ;
			WIDTH 100

		@ 70,120 TEXTBOX text_3 ;
			VALUE '12.123.123' ;
			INPUTMASK '99.999.999' 

		@ 70,290 LABEL label_3b ;
			VALUE '99.999.999' 


		@ 100,10 LABEL label_4 ;
			VALUE 'Credit Card:' ;
			WIDTH 100

		@ 100,120 TEXTBOX text_4 ;
			WIDTH 150 ;
			VALUE '1234-1234-1234-1234' ;
			INPUTMASK '9999-9999-9999-9999' 

		@ 100,290 LABEL label_4b ;
			VALUE '9999-9999-9999-9999' ;
			WIDTH 160

		@ 130,10 LABEL label_5 ;
			VALUE 'Complex Code:' ;
			WIDTH 100

		@ 130,120 TEXTBOX text_5 ;
			WIDTH 130 ;
			VALUE 'JZ-123/4(X-DKS)' ;
			INPUTMASK 'AA-999/9(A-AAA)'  ;
			ON ENTER MSGBOX(This.Value)

		@ 130,290 LABEL label_5b ;
			VALUE 'AA-999/9(A-AAA)' 

		@ 160,10 LABEL label_6 ;
			VALUE 'Phone Number:' ;
			WIDTH 100

		@ 160,120 TEXTBOX text_6 ;
			WIDTH 130 ;
			VALUE '(651) 384 - 8372' ;
			INPUTMASK '(999) 999 - 9999'  

		@ 160,290 LABEL label_6b ;
			VALUE '(999) 999 - 9999'  

	END WINDOW

	CENTER WINDOW Form_1

	ACTIVATE WINDOW Form_1

Return
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
andyglezl
Posts: 1461
Joined: Fri Oct 26, 2012 7:58 pm
Location: Guadalajara Jalisco, MX
Contact:

Re: TEXTBOX - INPUTMASK

Post by andyglezl »

Creo que es lo mismo que esto, no ?

http://www.hmgforum.com/viewtopic.php?f ... orm#p55640
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: TEXTBOX - INPUTMASK

Post by SALINETAS24 »

Hola Andy, no es lo mismo.

Mira, ahora pongo el código con el problema.
Si lo compilas y ejecutas verás que tengo una variable "cVar" a la que asigno una cadena "98000101" y que posteriormente quiero pedir ese valor (o confirmarlo a través de un TEXTBOX y bajo una máscara...
Como puedes ver se me pierden los números y eso en clipper no pasaba, la mascara era independiente del valor.., o es que ya no lo recuerdo. :oops:
La solución poco ortodoxa pasa por ampliar el campo del fichero (añardirle dos dígitos más), y grabarlo "98/0001/01", lo cual no me mola.
En el Label si que funciona, displayo el valor con la máscara que quiero, pero en el TEXTBOX la variable asume el formato del INPUTMASK.
Si pides un teléfono con el formato "(99)999.99.99.99" en el fichero se te graba (99)999.99.99.99 y no el valor que hayas puesto...
¿eso es así...?




Code: Select all

/*
* HMG InputMask Demo
* (c) 2003 Roberto lopez
*/

/*

	InputMask String For Character TextBox

        9	Displays digits
	!       Displays Alphabetic Characters (uppercase)
	A	Displays Alphabetic Characters

	(All other characters are included in text in the position indicated 
	by the mask)

	Format String

	No Format Stirng Is Allowed For Character TextBox

*/

#include "hmg.ch"

Function Main
local cVar:="98000101"

	DEFINE WINDOW Form_1 ;
		AT 0,0 ;
		WIDTH 450 ;
		HEIGHT 250 ;
		TITLE 'InputMask Demo' ;
		MAIN 

		DEFINE MAIN MENU
			POPUP 'Test'
				ITEM 'Get Text_1 Value' ACTION MsgInfo (Form_1.Text_1.Value)
				ITEM 'Set Text_1 Value' ACTION Form_1.Text_1.Value := 'GEW-57927/X'
				ITEM 'Set Text_1 Focus' ACTION Form_1.Text_1.SetFocus
				SEPARATOR
				ITEM 'Get Text_2 Value' ACTION MsgInfo (Form_1.Text_2.Value)
				ITEM 'Set Text_2 Value' ACTION Form_1.Text_2.Value := '123.456.789-12' 
				ITEM 'Set Text_2 Focus' ACTION Form_1.Text_2.SetFocus
				SEPARATOR
				ITEM 'Get Text_3 Value' ACTION MsgInfo (Form_1.Text_3.Value)
				ITEM 'Set Text_3 Value' ACTION Form_1.Text_3.Value := '12.345.678' 
				ITEM 'Set Text_3 Focus' ACTION Form_1.Text_3.SetFocus
				SEPARATOR
				ITEM 'Get Text_4 Value' ACTION MsgInfo (Form_1.Text_4.Value)
				ITEM 'Set Text_4 Value' ACTION Form_1.Text_4.Value := '1234-1234-1234-1234' 
				ITEM 'Set Text_4 Focus' ACTION Form_1.Text_4.SetFocus
				SEPARATOR
				ITEM 'Get Text_5 Value' ACTION MsgInfo (Form_1.Text_5.Value)
				ITEM 'Set Text_5 Value' ACTION Form_1.Text_5.Value := 'AA-999/9(A-AAA)'   
				ITEM 'Set Text_5 Focus' ACTION Form_1.Text_5.SetFocus
				SEPARATOR
				ITEM 'Get Text_6 Value' ACTION MsgInfo (Form_1.Text_6.Value)
				ITEM 'Set Text_6 Value' ACTION Form_1.Text_6.Value := '(253) 427 - 7362'   
				ITEM 'Set Text_6 Focus' ACTION Form_1.Text_6.SetFocus

			END POPUP
		END MENU

		@ 10,10 LABEL label_1 ;
			VALUE 'Simple Code:' ;
			WIDTH 100

		@ 10,120 TEXTBOX text_1 ;
			VALUE 'ZFA-17529/Z' ;
			INPUTMASK 'AAA-99999/A'

		@ 10,290 LABEL label_1b ;
			VALUE 'AAA-99999/A' 
			WIDTH 100

		@ 40,10 LABEL label_2 ;
			VALUE 'Brazil ID:' ;
			WIDTH 100 

		@ 40,120 TEXTBOX text_2 ;
			VALUE '123.456.789-12' ;
			INPUTMASK '999.999.999-99' 

		@ 40,290 LABEL label_2b ;
			VALUE '999.999.999-99' 

		@ 70,10 LABEL label_3 ;
			VALUE 'Argentina ID:' ;
			WIDTH 100

		@ 70,120 TEXTBOX text_3 ;
			VALUE '12.123.123' ;
			INPUTMASK '99.999.999' 

		@ 70,290 LABEL label_3b ;
			VALUE '99.999.999' 


		@ 100,10 LABEL label_4 ;
			VALUE 'Credit Card:' ;
			WIDTH 100

		@ 100,120 TEXTBOX text_4 ;
			WIDTH 150 ;
			VALUE '1234-1234-1234-1234' ;
			INPUTMASK '9999-9999-9999-9999' 

		@ 100,290 LABEL label_4b ;
			VALUE '9999-9999-9999-9999' ;
			WIDTH 160

		@ 130,10 LABEL label_5 ;
			VALUE 'Complex Code:' ;
			WIDTH 100
/*
		@ 130,120 TEXTBOX text_5 ;
			WIDTH 130 ;
			VALUE 'JZ-123/4(X-DKS)' ;
			INPUTMASK 'AA-999/9(A-AAA)'  ;
			ON ENTER MSGBOX(This.Value)
*/
		@ 130,120 TEXTBOX text_5 ;
			WIDTH 130 ;
			VALUE cVAr ;
			INPUTMASK '99/9999-99'  ;
			ON ENTER MSGBOX(This.Value)

		@ 130,290 LABEL label_5b ;
			VALUE 'AA-999/9(A-AAA)' 

		@ 160,10 LABEL label_6 ;
			VALUE 'Phone Number:' ;
			WIDTH 100

		@ 160,120 TEXTBOX text_6 ;
			WIDTH 130 ;
			VALUE '(651) 384 - 8372' ;
			INPUTMASK '(999) 999 - 9999'  

		@ 160,290 LABEL label_6b ;
			VALUE '(999) 999 - 9999'  

	END WINDOW

	CENTER WINDOW Form_1

	ACTIVATE WINDOW Form_1

Return
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
andyglezl
Posts: 1461
Joined: Fri Oct 26, 2012 7:58 pm
Location: Guadalajara Jalisco, MX
Contact:

Re: TEXTBOX - INPUTMASK

Post by andyglezl »

Creo que tu problema es que estás manejando una variable (o un campo)
de "TEXTO" en vez de NUMERICO.

Prueba lo siguiente:
*-----------------------------------------------------------------------------------------------
I think your problem is that you're working a variable (or a field)
of "TEXT" instead of NUMERIC.

Try the following:

Code: Select all

		*cVar := "98000101"		// TEXTO
		*cVar := 98000101		// NUMERICO

		cVar:=TRANSFORM( 98000101, '99/9999-99')
		cVar:=TRANSFORM( VAL("98000101"), '99/9999-99')
		
		@ 130,120 TEXTBOX text_5 ;
			WIDTH 130 ;
			VALUE cVAr ;
			INPUTMASK '99/9999-99'  ;
			ON ENTER MSGBOX(This.Value)
P.D.
En la definicion hay un texto que dice:

(All other characters are included in text in the position indicated by the mask)

Por lo tanto creo que "/" y "-" remplazan al primer "0" y y al último "1".

Otro P.D.
Si te fijas en el ejemplo, todos los "value" son iguales a los "inputmask", por lo tanto
tu variable o campo lo deberas tener igual.
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: TEXTBOX - INPUTMASK

Post by SALINETAS24 »

Hola Andres, y gracias por contestar.
Al final es la misma conclusión a la que yo he llegado...
Otro P.D.
Si te fijas en el ejemplo, todos los "value" son iguales a los "inputmask", por lo tanto
tu variable o campo lo deberas tener igual.
Por eso digo ...,
eso en clipper no pasaba, la mascara era independiente del valor.., o es que ya no lo recuerdo
En HMG la variable, si es alfanumérica, tiene que tener el mismo formato que la mascara.
Al contrario que ocurre con LABEL donde la máscara únicamente displaya el valor con el formato que queremos, el TEXTBOX modifica el formato de la variable ajustadola a la mascara. Algo a tener en cuenta y más cuando el valor resultante pueda ser utilizado como campo clave en una DBF... :lol:

Lo dicho, muchas gracias y una cerveza 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:
Post Reply