Color del Campo

Que tal experto, mi problema es que tengo creado un dw que contiene 15 campos, lo que requiero es que cuando el cursor este posicionado en un campo me lo ponga de color blanco y de lo contrario lo ponga de color gris solo el campo en donde esta el cursor y los demás me los deje en gris.
De antemano muchas gracias por tu ayuda.
Atentamente
Abraham Avilés López
México, D.F.

1 Respuesta

Respuesta
1
Mi recomendación es que le eches un vistazo a las propiedades que tiene cada datawindow object, estas propiedades tienen la capacidad de poder recibir una condición escrita por el programador, para determinar el comportamiento de estas
En el caso del cambio de color. Por ejemplo,
hablemos de una columna llamada monto, la cual contiene un valor numérico, digamos que cuando el valor sea negativo este debe presentarse en rojo y cuando sea positivo en regro.
Simplemente vas a la propiedad de color en la pestaña de font. Y en el área de condición escribes.
if((monto > 0), rgb(0,0,0), rgb(255,0,0))
Lo que sucede con esta condición es muy simple, verifica que el valor de monto sea positivo o negativo, el resto lo hace la función rgb() que determina el valor que en la propiedad color deberá configurarse, (rojo o negro)
Seguro que este ejemplo es muy elemental, sin embargo la condición de evaluación de la función if(), tiene la capacidad de evaluar una función.
Esta función puede ser una propia del lenguaje, de las cuales te mostrará un pick-list, de todas y te indica el propósito de cada una, o bien puede optar por crear una propia, con la salvedad de que tienes que crearla del tipo publico. Y para mejor facilidad tuya, con por lo menos un valor de referencia.
Veamos un ejemplo.
Digamos que yo creo una función que evalúe un valor numérico y que en función de este devuelva un valor tipo color, rojo cuando sea negativo y negó cuando no.
La función la voy a llamar
EvalMonto( <adc_monto: decimal> )
Lo que aparece en signos <> es el argumento que declararé del tipo decimal.
Bien.
La función internamente hace lo siguiente.
long li_return
if (adc_monto > 0 ) then
li_return = RGB(0, 0, 0)
else
li_return = RGB(255, 0, 0)
end if
return( li_return)
Luego en la propiedad color de la pestaña font, del datawindow object, que corresponde a la columna MONTO, coloco
EvalMonto(monto)
El efecto será el buscado, cuando monto sea negativo, este será presentado en rojo.
Sin embargo, el utilizar funciones de este tipo (publicas del usuario), y dependiendo de lo que estas puedan incluir, van a mermar el rendimiento del datawindow, puesto que estas se ejecutan cada vez que es refrescado el campo o la columna, lo que siguinifica que cada vez que cambias de registro, o repintas la pantalla, esta función será evaluada, esto te lo anticipo pues la función como ya te habrás dado cuenta, puede contener consultas de tablas y esto es tiempo de espera entre solicitud y respuesta.
Debe existir una función de las predetermindas del lenguaje que verifique la presencia del cursor, en el área de edición del objeto, esto regularmente lo puedes obtener en un evento propio del datawindow llamado
mousemove.
El cual sino existe simplemente lo das de alta utilizando los recursos propios de power builder.
Sin embargo manejar esto por medio del evento puede que te provoque un tiempo adicional de programación, puesto que tienes que tomar en cuenta factores adicionales.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas