Campo de texto que cambia su color de fondo tal como se llena

Programar una caja de texto para que cambie su color de fondo tal y como se va llenando

Si deseamos que un campo de texto (textBox) de un formulario creado en Writer, Calc o Base, o de un formulario del usuario, cambie su color de fondo tal y como el usuario va escribiendo, deberemos de crear dos subrutinas en el editor de macros, y definir en el control su propiedad Longitud máxima del texto. Así de sencillo.

Lo mejor de todo es que estas subrutinas se pueden aplicar a cualquier textBox, ya que calculan los colores en función del número máximo de caracteres y de los que ya se han escrito.

Para que el sistema funcione a la perfección aprovecharemos los eventos del campo de texto para que cada vez que el usuario haga clic en el control, modifique el texto que contiene o salga del control entren en juego las macros para asignarle el color de fondo oportuno.

Además, hemos considerado oportuno que las macros definan también la ayuda emergente que se presenta cuando el usuario sitúa el ratón sobre el control, informando de número de caracteres que puede escribir todavía.

Puedes seguir nuestro paso a paso, pero si quieres comprobar el funcionamiento sin tener que escribir código ni insertar controles, puedes descargar este documento de Writer que contiene todo lo necesario.

Color-Progresivo-TextBox-OpenOffice.odt

Seguridad de macros

Recomendamos configurar el nivel de seguridad de macros en el nivel Medio (desde Herramientas > Opciones > OpenOffice > Seguridad > Seguridad de macros), pues de esta forma OpenOffice preguntará al usuario si desea activar las macros al abrir los documentos que las contengan.

Crear un formulario de Writer paso a paso

Abre un documento nuevo de Writer. Desde el menú Ver > Barras de herramientas muestra Campos de control de formulario.

Si no lo está, activa el Modo diseño desde la barra de herramientas.

Inserta un campo de texto (textBox) como el que muestra la imagen. Con el control seleccionado, activa el diálogo Propiedades desde la barra de herramientas (botón Control) y establece:

Propiedad Valor
Nombre Texto1
Longitud máx. del texto 200
Tipo de texto Múltiples líneas

Ya hemos definido nuestro primer control  . Cierra la ventana Propiedades.

El código de las macros

Ahora, activa el editor de macros (menú Herramientas > Macros > Organizar macros... > OpenOffice Basic)

Crea un nuevo módulo en el documento, o si lo prefieres, en la librería Standard del contenedor Mis macros y diálogos (consulta Contenedores, librerías y módulos en OpenOffice Basic). Nosotros lo hemos llamado Controles.

Teclea o copia y pega el siguiente código en el nuevo módulo:

Sub ColorProgresivoTextBox( oEv )
' Cambia progresivamente el color de fondo según el número
' de carácteres se acerca al máximo permitido
Dim n As Long, m As Long, r As Long
Dim Propiedades As Object
Propiedades = oEv.Source.Model
With Propiedades
n=Len(.Text)
m = .MaxTextLen
If m>0 Then
.HelpText = "Quedan " & m-n & "/" & m & " caracteres."
r =255/m*n
.BackgroundColor = RGB(r,255-r,0)
EndIf
End With
End Sub

 


Sub QuitaColorFondo( oEv )
' Cambia el color de fondo a blanco
Dim Propiedades As Object
Propiedades = oEv.Source.Model
With Propiedades
.BackgroundColor = RGB(255,255,255)
If .MaxTextLen > 0 Then .HelpText = "Máximo " & .MaxTextLen & "caracteres"
End With
End Sub

Cómo funcionan las macros

La subrutina ColorProgresivoTextBox modificará el color de fondo de un campo de texto tal y como el usuario va escribiendo en el control, hasta alcanzar el límite definido por su propiedad Longitud máx. del texto (MaxTextLen). También asignará el color correspondiente al control cuando éste coja el foco (el usuario hace clic sobre el control).

Por su parte, QuitaColorFondo reestablece el color blanco del fondo cuando el control pierde del foco (el usuario hace clic en otro lugar).

Como se puede observar, también hemos hecho que se modifique la propiedad HelpText del control (la ayuda emergente), de forma que el usuario puede conocer los caracteres máximos cuando el control no tiene el foco, o los que puede seguir escribiendo cuando sí lo tiene.

Ambas rutinas se asociarán a un evento de los controles del documento, en OOBasic, los eventos pasan a la rutina un objeto que nos permite alcanzar al control y a sus propiedades, que no es más que el propio evento al que asociamos la macro (según asociemos que el control coge foco, lo pierde, o el usuario modifica el texto que contiene).

El objeto oEv nos permite alcanzar el control a través de su propiedad Source (oEv.Source), y también las propiedades del control a través de su propiedad Model (oEv.Source.Model) (ver Diálogos OpenOffice Basic)

Para que nos resulte más cómodo manejar el control, en ambas subrutinas hemos definido un objeto al que llamamos Propiedades, y al que asignamos la propiedad Model. Con una estructura Basic With, acceder a las propiedades del control resulta ahora mucho más fácil.

Para cambiar el color de fondo utilizamos la función RGB, que dadas las componentes Roja, Verde y Azul devuelve el valor Long que define el color de fondo; variando al alza la componente roja y a la baja la componente verde según la longitud del texto tecleado se acerca al máximo permitido conseguiremos que el fondo del control cambie del verde al rojo conforme se va llenando.

Dado que el valor máximo de una componente es 255, deberemos "normalizar" el valor para que el máximo número de caracteres permitidos en el control coincida con la componente roja en 255 y la verde en 0, lo cual se consigue con una regla de tres simple.

Asignar macros a los eventos

Cierra el editor IDE, con lo que volvemos a nuestro documento. No estaría mal guardar y asignarle un nombre.

De nuevo en Modo diseño, selecciona el control y muestra la ventana Propiedades. Desde la ficha Acontecimientos, asigna la macro ColorProgresivoTextBox a los eventos Texto modificado y Recepción de foco.

 

 

La subrutina QuitaColorFondo la asignaremos al evento Al perder el foco. Cierra la ventana Propiedades.

Crear una copia del control Campo de texto (TextBox)

Copia y pega un duplicado del control Campo de texto justo debajo del primero.

Con esta sencilla acción obtendremos un control duplicado del primero, que contiene las mismas propiedades y cuyos eventos están asignados a las mismas macros. Modifica en la copia las siguientes propiedades:

Propiedad
Valor
Nombre Texto2
Longitud máx. del texto 100

Desactiva el Modo diseño. Guarda cambios en el documento y prueba el funcionamiento de los cuadros de texto.

Si te ha gustado puedes dejar un mensaje en nuestro Libro de Visitas, seguirnos en las redes sociales y/o hacer clic en un enlace de nuestros patrocinadores.

No hay reacciones, todavía


Form is loading...

Otros usuarios vieron...

  • Esta función devuelve la letra del NIF asociada a un número de DNI

    Function LetraNif(dni As Long) As String
    LetraNif = Mid("TRWAGMYFPDXBNJZSQVHLCKE", (dni Mod 23) + 1, 1)
    End Function
  • Esta macro permite definir el formato de página de un documento OpenOffice Writer.

    Las dimensiones alto y ancho del papel, así como de los márgenes, se expresan en centímetros.

  • Usar la función DIR para recorrer archivos y carpetas

     

    La función DIR de Basic nos permite recorrer una carpeta y averiguar cual es su contenido.

    Podemos obtener los archivos que contiene, las carpetas qu…

Patrocinado por SBS  Contacto • ©2019 by SalvaDCH