Access... Colorear cuadro de texto en registro activo

Hay alguna forma de colorear un cuadro de texto, en el registro activo solamente, ¿en un subformulario con formularios continuos?

O a un cuadro de color.

Seria para poder identificar entre una gran cantidad de regstros esa línea...

¿Cómo podría hacerse?

2 Respuestas

Respuesta
1

Para colorear un objeto en el registro activo (no importa si es un formulario continuo, se trata del 'registro activo'), se puede hacer en el evento 'Current' (al activar registro) del formulario a colorear.

Se le puede cambiar el color de la tinta, del fondo o cualquiera otra cualidad.

Así lo hice y funciona perfecto,... pero le consulto una cosita más... puse un campo debajo de varios controles que son transparentes, para que cuando se de la condición ese campo cambie de color y los controles que están arriba sean del color de la condición y así lo hace y funciona bien. Pero cuando hago foco en algún control (que este arriba del campo), a pesar de ser transparente, este control se vuelve blanco, o sea deja de ser transparentre... y no estoy encontrando la solución o propiedad para que quede del mismo color que el campo de abajo, o sea que a pesar de tener el foco siga siendo transparente.

Se que se puede porque lo vi en algún ejemplo, pero no estoy encontrando la manera. ¿Alguna sugerencia donde mirar?

Trabajar con capas tiene inconvenientes, cualquier objeto que sea trasparente al recibir el foco toma un color de fondo (que se puede elegir), pero pierde la trasparencia y si lo seleccionamos no seleccionamos al objeto que esta 'debajo' y que es con el que deseamos (o necesitamos) interactuar.

Para evitar ese problema la solución iría en la línea de que las capas superiores (que solo sirven para colorear) se les impone como condición que si reciben el foco (o cuando lo reciben) le pasen el foco al objeto que tiene el dato, y a este que al perder el foco pase a segundo plano.

Si se envía el foco a un objeto que tiene otro superpuesto, automáticamente pasa a primer plano (se convierte en el objeto activo).

¿Entonces una opción seria darle al control un formato condicional al tener el foco no? ¿Se podría hacer?

Como podría ser, en "la expresión seria" en formato condicional, que al tener el foco, ¿tenga también una condición? ¿O eso se tendría que hacer en el evento con vba nomas?

Quieres manipular el formulario para que destaquen unos datos en función de condiciones (eso es esta claro).

Pero no comentas que condiciones han de cumplir (a pesar de que se utilizan objetos que las están aplicando, los que (en segundo plano) dan color a los que son transparentes.

Un cuadro de texto podrá tener el fondo (BackColor) deshabilitado (le permite ser trasparente), pero cuando sea el activo necesitara 'el papel' (activarlo) para garantizar que se aprecia lo que se escribe (esto lo hace así porque aplica la técnica de que el color del fondo y la tinta sean complementarios).

Dos entornos:
Formulario que presenta un único registro:

Se le puede cambiar el color y más propiedades en cualquier momento, tanto en el evento Current como en el que se modifique un valor que pueda ser parte de la condición.
Para esto último lo más 'practico' es aplicar las condiciones mediante una subfunción que se utilizaría en el evento Current y todos los demás.

Eso alivia la programación y si se necesita una adaptación se reforma en un único sitio (que vale para todos).

Otro entorno:

El formulario es continuo, el anterior método no es adecuado, pues los cambios se aplicarán a los mismos objetos en cada registro (no diferencia registros porque solo uno es real: el activo).

Para esta situación la alternativa es el formato condicional, pero ... es pesada y consume muchos recursos porque analiza a todos los registros y manipula el formulario para diferenciar a los registros visibles uno a uno (suele ser aceptable mientras no acabe dando dolor de cabeza si se exagera y la maquina lo soporte con dignidad).

Si tienes problemas para crear las condiciones (por ejemplo: como obtener los datos de referencia) plantea la duda, las condiciones deberían ser las mismas en cualquier método que se desee aplicar.

Por cierto, cuando se activa un cuadro de texto, el color de sus propiedades 'color de fondo' y color de tinta' acostumbran a ser antagónicos en la procura de la mejor visibilidad.

Bien, Paso a explicar. Son formularios continuos donde los registros tienen dos condiciones: "En Uso" e "Inactivo" (son datos comerciales de cuentas, billeteras, etc), y a veces se juntan una cantidad de datos considerable (por ejemplo de un mismo negocio pero diferente sucursal, encargado, etc). Eso sin problemas con el formato condicional.

Ahora, en alguna oportunidad hubo alguna confusión al elegir el registro y copiar algún dato (ejemplo se copiaba un dato de una línea y se confundió con los datos de la línea de abajo), entonces para solucionar eso volvemos a la pregunta principal del tema que es " Colorear cuadro de texto en registro activo" lo cual hago por el momento de esta manera con este código que rescate de algún ejemplo (del búho o Marta sino me equivoco) con esta función:

' Seleccionar filas
' Selecciona todas las filas en las que el contenido del campo
' sobre el que se ha hecho Click sean iguales
Function SeleccionaFila()
Dim ctlCurrentControl As Control
Dim strControlName As String

' detectamos el campo sobre el que se ha hecho Click
Set ctlCurrentControl = Screen.ActiveControl

' se asigna el valor del campo al campo oculto
CampoOculto = ctlCurrentControl.Value

' con ctlCurrentControl.Name podemos saber
' el nombre del control sobre el que se ha hecho Click
' y se cambia la expresion del formato condicional
' del campo oculto para que represente el campo y el valor actual
Me.CampoOculto.FormatConditions.Item(0).Modify acExpression, , "[" & ctlCurrentControl.Name & "]=[CampoOculto]"
End Function

Poniendo en el evento al hacer click de los controles el llamado de la Función.

Y funciona bien, queda marcado en rojo los datos INACTIVOS y cuando selecciono un registro (hago click en un control) me selecciona el cuadro oculto, lo colorea, dando ese efecto de seccionar la fila.

Pero al control en el cual hago el click lo deja con fondo blanco

En la imagen se muestra con dos registros, pero si hubiera tres o más, estarían los Inactivos en rojo, el Seleccionado en Celeste y los demás en Blanco... funciona bien... el único detallito es al hacer el click queda blanco cualquier control en el que lo haga.

Intente también ponerle formato condicional al tener el foco, pero no funciona muy bien, a veces el rojo se vuelve azul.

Supongo chocaran entre Formatos condicional.

¿Y me preguntara porque no saco los que están inactivos? Seria una opción pero tendría que ponerle un "control de duplicado" para cuando se ingrese un nuevo dato (seguramente lo haré). Aparte quiero aplicar esto a otros formularios de otras clases de datos, por ejemplo códigos de barra de mercaderías donde se repiten bastante un mismo código para dos artículos distintos.

Esa función sirve muy bien para simular selección de registro.

Ejemplos de estética muy lograda serán de -MARTA-, en cuestiones de acabados era (y supongo que aún es) muy detallista.

Lo de cruzar 'la línea' se suele resolver aplicando color de fondo alternativo en las líneas y si se desea seleccionar a los que cumplan la condición de ser iguales (o similares) al seleccionado, en lugar de colorear los filtraría en tiempo de ejecución (pero para gustos: colores).

Para evitar que el registro seleccionado tenga un color de fondo diferente, se puede aplicar una técnica:

Se le aplica el color de fondo que tendrán los seleccionados, a continuación, la trasparencia y si se cumplirá que el seleccionado (cuando sea el activo y 'recupere el fondo') tendrá el mismo color que los seleccionados (sería 'su color natural', invisible si no está seleccionado).

Respuesta
1

Puede utilizar el formato condicional, adicione una regla de acuerdo con las condiciones, si no hay condiciones puede utilizar la regla "el campo tiene foco" seleccione el color y el fondo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas