Introducir dato numérico en TextBox de derecha a izquierda [SOLUCIONADO]

Manipulación de la Entrada Numérica en Visual FoxPro

Visual FoxPro, una herramienta poderosa en el desarrollo de aplicaciones de bases de datos, permite a los desarrolladores personalizar la experiencia del usuario de una manera muy precisa. Uno de los aspectos que se pueden personalizar es cómo se introducen los datos en los campos de texto, particularmente los numéricos. A menudo, los desarrolladores enfrentan la solicitud de permitir la entrada de números en un cuadro de texto comenzando desde el dígito más significativo, es decir, de derecha a izquierda. En este artículo, exploraremos cómo se puede lograr este comportamiento en Visual FoxPro.

Configuración del TextBox

Para poder controlar la dirección de la entrada de datos en un TextBox, es necesario configurar sus propiedades de manera adecuada. Visual FoxPro no incluye una propiedad nativa para este propósito, pero con algo de lógica y programación, es posible implementarlo. A continuación, se muestra cómo configurar un control TextBox para lograr la inserción de números de derecha a izquierda.

Creando el TextBox

Primero, se debe crear un cuadro de texto en el formulario para poder manipular su entrada. A continuación se presenta un ejemplo de cómo se podría definir:

DEFINE WINDOW wExample FROM 1,1 TO 10,30 
DEFINE TEXTBOX txtNumber FROM 2,2 TO 4,28 PARENT wExample
ACTIVATE WINDOW wExample

Implementación del Comportamiento

Una vez que se tiene creado el TextBox, el siguiente paso es manipular el evento de entrada de teclado para cambiar la dirección del cursor y la inserción del texto. Esto requiere escribir una función personalizada para el evento KeyPress.

Este es un código de ejemplo que ilustra cómo manejar el evento:

PROCEDURE txtNumber.KeyPress
LPARAMETERS nKeyCode, nShiftAltCtrl
THIS.Value = CHR(nKeyCode) + THIS.Value
ENDPROC

En el código anterior, cada vez que se presiona una tecla, se captura el evento y se añade el carácter al inicio de la cadena existente en txtNumber.Value. Este enfoque simple invierte efectivamente la dirección en la que se introducen los caracteres.

Trabajando con Números Enteros y Decimales

Si el programa necesita manejar decimales, la lógica se complica ligeramente. Es necesario determinar si el carácter introducido se debe colocar antes o después del punto decimal. A continuación, se presenta un ejemplo de cómo implementar la lógica para manejar la entrada de números con decimales de derecha a izquierda:

PROCEDURE txtNumber.KeyPress
LPARAMETERS nKeyCode, nShiftAltCtrl
LOCAL lcChar, lcCurrentValue, lnDotPos
lcChar = CHR(nKeyCode)
lcCurrentValue = THIS.Value
lnDotPos = AT(".", lcCurrentValue)

IF lnDotPos = 0
   THIS.Value = lcChar + lcCurrentValue
ELSE
   THIS.Value = LEFT(lcCurrentValue, lnDotPos - 1) + lcChar + SUBSTR(lcCurrentValue, lnDotPos)
ENDIF
ENDPROC

En este caso, el código busca la posición del punto decimal y dependiendo de si existe o no, inserta el número en el lugar correspondiente.

Manejo de Errores y Validaciones

Aunque la lógica de inserción puede ser simple, no se debe subestimar la necesidad de incluir un manejo de errores robusto y validaciones dentro del programa. Esto asegura que la entrada del usuario sea siempre un número válido y se encuentra dentro de los parámetros esperados por la aplicación.

PROCEDURE txtNumber.KeyPress
LPARAMETERS nKeyCode, nShiftAltCtrl
IF nKeyCode >= 48 AND nKeyCode <= 57 OR nKeyCode = 46
   LOCAL lcChar, lcCurrentValue, lnDotPos
   lcChar = CHR(nKeyCode)
   lcCurrentValue = THIS.Value
   lnDotPos = AT(".", lcCurrentValue)

   IF lnDotPos = 0
      THIS.Value = lcChar + lcCurrentValue
   ELSE
      THIS.Value = LEFT(lcCurrentValue, lnDotPos - 1) + lcChar + SUBSTR(lcCurrentValue, lnDotPos)
   ENDIF
ELSE
   NODEFAULT
ENDIF
ENDPROC

En el código de arriba, solo se permite la inserción de caracteres que caigan dentro del rango ASCII de números del 0 al 9 (48 a 57) y del punto (46), evitando así caracteres no deseados.

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad