Page 1 of 2

MODIFICAR UN GET NUMERICO (solucionado)

Posted: Fri Sep 25, 2015 10:01 pm
by Maggiro
Buenas tardes Amigos del Foro :
- Comportamiento Con el viejo Clipper,
Tengo un campo GET ya escrito con el numero 1.000
Cuando regreso al campo para modificar su contenido, y como primera tecla pulso el punto decimal,
Clipper elimina el entero, poniendo el cursor en el primer decimal, el numero va apareciendo 0.000.
- Comportamiento Visual FWH
FWH no elimina el entero, poniendo el cursor en el primer decimal, el numero va apareciendo 1.000.
- El picture es '9999.999'
- La pregunta:
Puedo emular el comportamiento de Clipper para éste caso específico??

Otrosi:
He estado probando modificar el numero pulsando flecha derecha, luego un cero mas el punto decimal,
el GET no modifica, sigue precisando 1.000 y lo que pulsé no lo tomó en cuenta.
En otro modo, si al volver al campo, lo primero que pulso es el cero, si modifica el GET

Muchas Gracias por Vuestras respuestas !!!

Julio César Gómez Cortéz
Godryc Experiencias
Lima Perú

Re: MODIFICAR UN GET NUMERICO

Posted: Sat Sep 26, 2015 3:43 am
by joseluisysturiz
Saludos, yo lo uso de esta manera y me funciona perfectamente al colocar el punto (.) asume que va entrar decimales, intenta asi y comenta, gracias... :shock:

Code: Select all

PICTURE "@E 999,999.99"
 

Re: MODIFICAR UN GET NUMERICO

Posted: Sat Sep 26, 2015 6:42 am
by Maggiro
Saludos joseluisysturiz :
No hay problema en el Picture, tanto el mio como el tuyo van directo al punto decimal cuando se pulsa.
Necesito encontrar la forma que FWH, cuando pulse un punto, entienda CERO mas PUNTO.
y creo que he visto el código a modificar en el TGET.PRG
si lo aplico, te comento.
Un Abrazo
Julio César Gómez Cortéz
Godryc Experiencias
Lima Perú

Re: MODIFICAR UN GET NUMERICO

Posted: Sat Sep 26, 2015 2:13 pm
by joseluisysturiz
Maggiro wrote:Saludos joseluisysturiz :
No hay problema en el Picture, tanto el mio como el tuyo van directo al punto decimal cuando se pulsa.
Necesito encontrar la forma que FWH, cuando pulse un punto, entienda CERO mas PUNTO.
y creo que he visto el código a modificar en el TGET.PRG
si lo aplico, te comento.
Un Abrazo
Julio César Gómez Cortéz
Godryc Experiencias
Lima Perú
Te respondo que a mi me funciona como dices, al colocar el punto, se asume de forma automatica q es decimal y se coloca el cero del lado izquierdo y da paso a que coloque la cantidad decimal, nose si ese es tu problema q no te lo hace, saludos... :shock:

Re: MODIFICAR UN GET NUMERICO

Posted: Sat Sep 26, 2015 2:23 pm
by Maggiro
Asi es, amigo joseluisysturiz :
No encuentro la razon aun ...
Probé la máscara con el Picture que me indicaste.
- Al pasar por primera vez por el GET, escribi la cantidad 1.000
- Regresé a modificarlo para poner la cantidad 0.075
- cuando regreso, el cursor se posiciona al inicio del GET
- alli es cuando pulso el punto decimal
- y lo que hace el GET solo es correr el cursor al punto decimal, no borra el entero.
Qué podría estar pasando?

Re: MODIFICAR UN GET NUMERICO

Posted: Sat Sep 26, 2015 3:35 pm
by VitalJavier
Hola buen dia
También a mi me sucede, para poner en un campo get
una cantidad de solo decimal tengo que teclear "0."

Con la mascara que nos dice JoseLuis tampoco me funciona

Saludos.

Re: MODIFICAR UN GET NUMERICO

Posted: Sat Sep 26, 2015 11:43 pm
by joseluisysturiz
VitalJavier wrote:Hola buen dia
También a mi me sucede, para poner en un campo get
una cantidad de solo decimal tengo que teclear "0."

Con la mascara que nos dice JoseLuis tampoco me funciona

Saludos.
Estan inicializando la Var en cero.? nVar := 0, asi inicializo mis VAR numericas y hasta ahora me trabaja todo como uds quieren, saludos... :shock:

Code: Select all

   REDEFINE GET aGet[6] VAR aVar[6] ID 4010 OF oDlg PICTURE "@E 999,999.99"
 

Re: MODIFICAR UN GET NUMERICO

Posted: Sun Sep 27, 2015 12:12 am
by Maggiro
joseluisysturiz :
las variables numericas siempre inicializan en cero al invocar el dialogo con GET
Recuerda que el comportamiento GET sucede al intentar modificar el valor que se le asignó
anteriormente, es decir, cuando la variable ya posee un valor.

Creo que el comportamiento puede solucionarse por aquí ...

METHOD KeyChar( nKey, nFlags ) CLASS TGet
case nKey >= 32 .and. nKey < 256
if ::oGet:Type == "N" .and. ( Chr( nKey ) == "." .or. Chr( nKey ) == "," )
if ::oGet:Clear()
#ifndef __XHARBOUR__
::oGet:DelEnd()
#endif
endif
::oGet:ToDecPos()

Parece que la orden en el método keychar indica que,
al pulsar un punto o una coma,
si la variable tiene un valor,
corra directamente el cursor hacia el decimal a la derecha del punto.

Lo que buscamos es que

cuando entramos a modificar el campo GET numerico con un valor ya asignado

y el cursor dentro del GET se encuentre al inicio del campo
if ::oGet:nPos:=1

Si pulsamos en ese momento el punto decimal

queremos que el método borre el valor previo de nuestra variable
le asigne un valor CERO mas PUNTO DECIMAL a la variable
y que el usuario continue modificando su variable en la parte decimal que desea escribir.

Dando vueltas
Mañana podré hacer una revision al código para enlazar un procedimiento
que capture ese momento y pueda modificar su comportamiento.
Salgo a trabajar ahora.

Re: MODIFICAR UN GET NUMERICO

Posted: Sun Sep 27, 2015 5:43 pm
by FranciscoA
VitalJavier wrote:Hola buen dia
También a mi me sucede, para poner en un campo get
una cantidad de solo decimal tengo que teclear "0."

Con la mascara que nos dice JoseLuis tampoco me funciona

Saludos.
Igual comportamiento tengo en mis programas:
1- Si el get tiene valor cero, no hay problemas.
2- Si ya tenía valor y tecleamos el ".", no borra el entero, tenemos que teclear "0."

Re: MODIFICAR UN GET NUMERICO

Posted: Mon Sep 28, 2015 8:31 am
by fgondi
Hola Julio Cesar,

Incluye la "k" en el picture.

Code: Select all

"@KE 999,999.99"
De esta forma, al pulsar la primer tecla, lo primero que hace es borrar el contenido del campo.
y por tanto si la primero tecla es el signo de separación decimal, aparecerá "0,"

Re: MODIFICAR UN GET NUMERICO

Posted: Mon Sep 28, 2015 2:23 pm
by VitalJavier
Fernando, buen dia

Pues ya lo probe como nos indicas "@KE 99,999.999" y nada
sigue igual.

Re: MODIFICAR UN GET NUMERICO

Posted: Mon Sep 28, 2015 2:53 pm
by karinha
Mira si ayuda:

Code: Select all

// -----------------------------------------------------------------------
// Funci¢n ...: PictPts
// Descripci¢n: Cadena Picture para un GET.
// Par metros : Ninguno.
// Devolve ..: Una cadena.
// -----------------------------------------------------------------------
FUNCTION PictPts()
RETURN( "@E 9,999,999,999" )
// -----------------------------------------------------------------------

// -----------------------------------------------------------------------
// Funci¢n ...: PictEuros
// Descripci¢n: Cadena Picture para un GET.
// Par metros : Ninguno.
// Devolve ..: Una cadena.
// -----------------------------------------------------------------------
FUNCTION PictEuros()
RETURN( "@E 9,999,999,999.99" )
// -----------------------------------------------------------------------

// -----------------------------------------------------------------------
// Funci¢n ...: Num2StrDec
// Descripci¢n: Convierte un campo num‚rico a cadena, para mostrar en un
//              LISTBOX.
// Par metros : nCampo -> Valor Num‚rico.
// Devolve ..: Cadena formateada.
// -----------------------------------------------------------------------
FUNCTION Num2StrDec( nCampo )
RETURN Transform( nCampo, "@E 999,999,999.99" )
// -----------------------------------------------------------------------

// -----------------------------------------------------------------------
// Funci¢n ...: Num2Str
// Descripci¢n: Convierte un campo num‚rico a cadena, para mostrarlo en un
//              LISTBOX.
// Par metros : nCampo -> Valor Num‚rico.
// Devolve ..: Cadena formateada.
// -----------------------------------------------------------------------
FUNCTION Num2Str( nCampo, nSize, nDec )

   LOCAL cPicture := "@E 999,999,999,999"

   DO CASE
      CASE nSize = 12 .AND. nDec = 0
           cPicture := "@E 999,999,999,999"
      CASE nSize = 12 .AND. nDec = 2
           cPicture := "@E 999,999,999.99"
      CASE nSize = 12 .AND. nDec = 3
           cPicture := "@E 99,999,999.999"
      CASE nSize = 08 .AND. nDec = 0
           cPicture := "@E 99,999,999"
      CASE nSize = 08 .AND. nDec = 2
           cPicture := "@E 99,999.99"
      CASE nSize = 08 .AND. nDec = 3
           cPicture := "@E 9,999.999"
      CASE nSize = 07 .AND. nDec = 0
           cPicture := "@E 9,999,999"
      CASE nSize = 07 .AND. nDec = 2
           cPicture := "@E 9,999.99"
      CASE nSize = 07 .AND. nDec = 3
           cPicture := "@E 999.999"
      CASE nSize = 05 .AND. nDec = 0
           cPicture := "@E 99,999"
      CASE nSize = 05 .AND. nDec = 2
           cPicture := "@E 99.99"
      CASE nSize = 05 .AND. nDec = 3
           cPicture := "@E 9.999"
      CASE nSize = 02 .AND. nDec = 0
           cPicture := "99"
   ENDCASE

RETURN Transform( nCampo, cPicture )
// -----------------------------------------------------------------------

// -----------------------------------------------------------------------
// Funci¢n ...: Num2Doc
// Descripci¢n: Convierte un campo num‚rico a cadena, para mostrarlo en un
//              LISTBOX. Solo para los n£meros de documento.
// Par metros : nCampo -> Valor Num‚rico.
// Devolve ..: Cadena formateada.
// -----------------------------------------------------------------------
FUNCTION Num2Doc( nCampo )
RETURN Transform( nCampo, "@E 9999999" )
// -----------------------------------------------------------------------
 
Saludos.

Re: MODIFICAR UN GET NUMERICO

Posted: Mon Sep 28, 2015 4:53 pm
by joseluisysturiz
Tienes toda la razon, he probado muchas combinaciones y cuando es para modificar, si le colocas el punto, no te hace la limpieza de los enteros, imagino ya sera algo de la clase...saludos... :shock:

Re: MODIFICAR UN GET NUMERICO

Posted: Mon Sep 28, 2015 5:58 pm
by Armando
Amigos del foro:

Como información adicional les menciono que en la clase TXBrowse sí
funciona como lo requieren.

Saludos

Re: MODIFICAR UN GET NUMERICO

Posted: Mon Sep 28, 2015 6:20 pm
by VitalJavier
Armando

En el TxBrowse

Si le das "enter" para editar si lo hace bien.

Pero si le das oBrow:lFastEdit := .T. al darle el "." no hace nada
le tienes que dar un numero primero, ya sea 0...9 y después el "."

Saludos.