Alguien puede postear un ejemplo de como dar colores de fondo diferentes a celdas diferentes en un xBrowse con array, cuya condicion proviene de otro xBrowse/array?
Me explico: El primer xBrw/array contiene dos columnas para Valores y Colores. El segundo xBrw/array solo contiene valores.
La idea es que el Browse 2 coloree sus celdas acorde a los valores y colores en el Browse 1.
He visto en el foro bastantes ejemplos, y aunque algunos funcionan bien, no encontré ninguno con las caracteristicas que expuse, aunque he tratado de ajustarlos a mis necesidades, pero sin resultados.
Aqui expongo el codigo que estoy escribiendo. ( Auto contenido para que puedan compilarlo )
Gracias.
- Code: Select all Expand view RUN
- #include "fivewin.ch"
#include "xbrowse.ch"
static aMe, aRu
//--------------------------------------------//
FUNCTION XBrwArrays()
local NN, n, oDlg, oBrw1, oBrw2, cCol, aPos
CreaArrays()
DEFINE DIALOG oDlg SIZE 540,200 PIXEL
@ 10, 10 XBROWSE oBrw1 SIZE 120,-10 PIXEL OF oDlg DATASOURCE aRu ;
COLUMNS 2,3 HEADERS "Numero", "Color"
oBrw1:CreateFromCode()
@ 10, 140 XBROWSE oBrw2 SIZE 120,-10 PIXEL OF oDlg DATASOURCE aMe ;
COLUMNS 1,2,3 HEADERS "Col1","Col2","Col3" ;
CELL LINES NOBORDER
oBrw2:nMarqueeStyle := MARQSTYLE_HIGHLCELL
oBrw2:lColChangeNotify := .t.
For NN := 1 to 2
For n := 1 to len(oBrw2:aCols)
if !Empty(oBrw2:aCols[n]:Value)
oBrw2:aCols[n]:bClrStd := ColorCelda( oBrw2, n )
endif
Next
oBrw2:GoDown()
Next
oBrw2:CreateFromCode()
ACTIVATE DIALOG oDlg
Return nil
//--------------------------------
Function ColorCelda(oBrw2, n)
local uValue, nPos, ncNum, cClr, nColor
uValue := oBrw2:aCols[n]:Value
nPos:= aScan(aRu, { | a | a[2] == uValue } )
ncNum := aRu[nPos,2]
cClr := aRu[nPos,3]
if cClr == "VERDE"
nColor := RGB(0, 215, 0)
elseif cClr == "ROJO"
nColor := RGB(225, 0, 0)
elseif cClr == "NEGRO"
nColor := RGB(0, 0, 0)
endif
RETURN {|| { CLR_WHITE, nColor } }
//-----------------------------
Function CreaArrays()
local n, aNms, aClr
aNms := {'1', '2', '3', '4', '5'}
aClr := {'V', 'N', 'R', 'V', 'R'}
aRu := {}
For n := 1 to Len(aNms)
aadd( aRu, {,,} )
aRu[n,1] := n
aRu[n,2] := aNms[n]
aRu[n,3] := if(upper(aClr[n]) ="V","VERDE" ,;
if(upper(aClr[n]) ="R","ROJO" ,;
if(upper(aClr[n]) ="N","NEGRO",)))
Next
aMe := Array(2)
aMe[1] := {'1', '2', ''}
aMe[2] := {'3', '4', '5'}
Return nil
Saludos.