Color Hexagesimal en una rejilla


([N2] overBCN) #1

Hola,
Hay alguna forma de poder plasmar un color Hexagesimal (ej. #DC143C) en una rejilla?
Saludos


([N3] pacosatu) #2

Hola overBCN.

Aclara un poco la pregunta.

Saludos
Paco Satué


([N1] OscarBarea) #3

Hola, @paco.satue
Quisiera que una columna la rejilla me pudiera mostrar un color Hexagesimal (ej. #DC143C). (Adjunto imagen)
No quiero casillero
img_01
Gracias


([N3] pacosatu) #4

Hola OscarBarea o ¿overBCN?

Lo que pides, en otros entornos de programación sería una chorrada, pero en Velneo es todo un mundo porque tenemos una Rejilla que es “una pena” como control y además se agrava con que las herramientas gráficas son prácticamente nulas.

La asignación del color en las celdas de la Rejilla es estático y no se puede hacer depender de una fórmula. Tampoco podemos insertar un Control en la Celda como hacemos en los Casilleros.

Así que solo nos queda la opción de añadir un campo Objeto Dibujo a la tabla y usar ese dibujo para mostrar de manera dinámica el Color correspondiente al valor Hexadecimal.

Mi propuesta es la siguiente:

  1. Añade a la tabla un campo Objeto Dibujo COLOR_DIB
  2. Añade al proyecto un objeto Dibujo DIB_NEGRO y con el editor de imagen de vDevelop creas un rectángulo de color negro y 32bpp. El tamaño 100x30px debe coincidir con el ancho y alto de la Celda de la Rejilla que vayamos a usar.
    imagen
  3. La Rejilla tendrá una columna mostrando el campo Dibujo COLOR_DIB. La propiedad Aspecto de dibujo “Estirar/Encoger” parece que no funciona, por eso hay que fijar un tamaño 100x30px.

Como ya tendrás la tabla con los colores añadidos puedes usar el siguiente proceso para rellenar el campo COLOR_DIB.

Cargar lista ( AUX_COLORES@0PS_Varios_dat, ID, , , , )
  Recorrer lista lectura/escritura
    Limpiar campo objeto ( COLOR_DIB )
    Ejecutar proceso ( PRO_AUX_COLORES_DIB_JS@0PS_Varios_dat, 1º plano: Local (síncrono), , ,)

El proceso PRO_AUX_COLORES_DIB_JS es el javascript que a partir del recurso DIB_NEGRO rellena el campo Dibujo con el color del campo Hexadecimal.

importClass("VImage");
// Crea un nuevo dibujo a partir del recurso DIB_NEGRO, le cambiamos el color y lo guardamos
var oImg = new VImage()
var cColorHex = theRegisterIn.fieldToString("COLOR_HEX")
// Valor decimal del color Hexadecimal (suponemos formato #RRGGBB)
var nColor = theRoot.calcFormulaVelneo('stringHexToNumber("' + cColorHex.substr(1) + '")')
// Cargamos un dibujo base desde el recurso del proyecto
if (oImg.loadResource("0PS_VARIOS_DAT/DIB_NEGRO")) {
	// Cambiamos todos los pixeles
	oImg.fill(nColor)
	// Guardamos la imagen
	theRegisterIn.setFieldImage("COLOR_DIB", oImg)
}

Puedes usar el proceso PRO_AUX_COLORES_DIB_JS en los Triggers Alta y Modificación para rellenar el campo COLOR_DIB con el color Hexadecimal cuando añades o modificas un Color.

Y eso es todo. Pruébalo.

Saludos
Paco Satué


([N2] overBCN) #5

Gracias @paco.satue, lo pruebo y comento.
Muchas gracias


([N2] overBCN) #6

Hola @paco.satue, lo he probado, pero no funciona.
He hecho todo lo que indicas.
Saludos


([N2] overBCN) #7

Corrijo!, Funciona a la perfección.
Al proceso no le había asociado la tabla :sweat_smile:
Muchas gracias