Power Builder - color campo

   
Vista:

color campo

Publicado por barrunto (51 intervenciones) el 30/10/2009 21:50:49
Como saber que color tiene un campo de un datawindows objeto
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:color campo con función EVALUATE

Publicado por miguell (153 intervenciones) el 31/10/2009 03:17:31
si tu campo / columna se llama por ejemplo 'mi_campo' y tu control de dw "dw_1":

color de fondo:
dw_1.Object.mi_campo.Background.Color

color de fuente:
dw_1.Object.mi_campo.Color

te devolverá el color como una string (siende un número), que puedes convertir a Long con la función Long( ). Sólo te dará este valor long, cuando no hayas usado una expresión RGB() en el attributo de por ejemplo background.color. En ese caso te dará

string ls_color
ls_color = dw_1.object.mi_campo.background.color

ls_color = "12632256 + una tabulación + rgb( 255, 255, 255)
(la parte antes del tab es el valor por defecto, asignada como color de fondo a la hora de construir (12632256 corresponde al color 'Window background de windows' que suele ser blanco pero que tiene un número diferente a blanco. La parte después del ~t es lo que quieres.

buscas la posición del tab, te quedas con la parte de la expresión y usas la función Evaluate( ) de datawindows - pasandolo a describe( ) para calcular el long:

string ls_color, ls_expresion
long ll_resultado, ll_pos, ll_fila_actual

ls_color = dw_1.object.mi_campo.background.color
ll_pos = pos(ls_color, '~t ')
if ll_pos > 0 then
ls_color = mid(ls_color, ll_pos + 1)
ll_row = dw_datawindows.getrow()
ls_eval = "Evaluate(~"" + ls_color + ", " + String( ll_row) + ")"
ls_color = dw_datawindows.Describe(ls_eval)
end if

// si lo necesitas convertir el string a long pero para comparar valores fijos no te
// hace falta
ll_resultado = string ( ls_color)
choose case ll_resultado
case 0
// entonces negro
case 16777214
// entonces blanco
case 12632256
// entonces windows background, el color depende lo que tengas asignado a ese
// color de windows, pero suele ser blanco también.
end choose

claro que podrías también pasar de evaluar la expresión obtenido:
case 'rgb( 255, 255, 255)'
// entonces blanco

pero tendrías que escribir todas expresiones de la misma forma:
todo en minúsculas, sí o no separar los valores con un espacio en blanco etc.

Es un auténtico coñazo el uso de la función evaluate pero funciona bien. (lo único es que no se usa mucho y cada vez te costará hacerlo funcionar hasta que todas las comillas y comillas dobles están en su sitio.)

Si ves la ayuda de powerbuilder sobre la función RGB( ) , verás de donde viene este color: una combinación de valores RGB (rojo verde y azul) que se llega a calcular hacia un long (del que hablo aquí arriba) con la siguiente fórmula:

Red + (256 * Green) + (65536 * Blue)

así que blanco:
rgb(255, 255, 255) resultaría en:
255 + 65.280 + 16.711.680 = 16.777.215

No me preguntes como calcular los valores RGB usados, partiendo desde un valor long (osea al revés). Pero creo que tiene que ser posible (matemáticas oxidadas).
Lo más fácil sería ver qué colores usas, ver cuales colores Long te dan como resultados, y los metes todos en un "choose case" por ejemplo.

Tablita de la ayuda de powerbuilder:
Color Red value Green value Blue value
--------------------------------------------------------------------
Black 0 0 0
White 255 255 255
Light Gray 192 192 192
Dark Gray 128 128 128
Red 255 0 0
Dark Red 128 0 0
Green 0 255 0
Dark Green 0 128 0
Blue 0 0 255
Dark Blue 0 0 128
Magenta 255 0 255
Dark Magenta 128 0 128
Cyan 0 255 255
Dark Cyan 0 128 128
Yellow 255 255 0
Brown 128 128 0

Saludos,
Miguel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:otro ejemplo de la función EVALUATE

Publicado por miguell (153 intervenciones) el 31/10/2009 03:22:20
otro link donde explican el EVALUATE (búscalo en la página siguiente):

http://members.fortunecity.es/jdbenitez/pbavanzado.htm

saludos,
miguel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:color campo con función EVALUATE

Publicado por ERRATA anterior post (153 intervenciones) el 31/10/2009 11:53:36
se me ha colado un error en la anterior respuesta:

ll_row = dw_datawindows.getrow()
ls_eval = "Evaluate(~"" + ls_color + ", " + String( ll_row) + ")"
ls_color = dw_datawindows.Describe(ls_eval)

donde pone "dw_datawindows" debería poner "dw_1" (para coincidir con el resto del código).

(es porque lo he probado en una ventana con ese nombre de control de dw).
miguel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:color campo con función EVALUATE

Publicado por ERRATA anterior post (153 intervenciones) el 31/10/2009 11:54:19
se me ha colado un error en la anterior respuesta:

ll_row = dw_datawindows.getrow()
ls_eval = "Evaluate(~"" + ls_color + ", " + String( ll_row) + ")"
ls_color = dw_datawindows.Describe(ls_eval)

donde pone "dw_datawindows" debería poner "dw_1" (para coincidir con el resto del código).

(es porque lo he probado en una ventana con ese nombre de control de dw).
miguel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar