Cambiar color a celda xbrowse segun condicion

Post Reply
User avatar
cmsoft
Posts: 1300
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina
Has thanked: 1 time
Been thanked: 3 times

Cambiar color a celda xbrowse segun condicion

Post by cmsoft »

Estoy intentando cambiar el color de una celda en un xbrowse según una condición.
También le cambio si es editable o no y el texto que muestra, esto último logro hacerlo, pero no el cambio de color

Code: Select all | Expand

aData := {{1,"Articulo 1",10,12},{2,"Articulo 2",15,0},{3,"Articulo 3",0,15},{4,"Articulo 4",15,15}}@ 40,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg ;      ARRAY aData ;           AUTOCOLS FASTEDIT;       SIZES 60,305,90,90,90,90,90,90,90,90;      CELL LINES  NOBORDER   PintaBrw(oBrw,0)         for each oCol in oBrw:aCols       NoMostrar(oCol)   NEXT i        WITH OBJECT oBrw      :nFreeze := 2      :CreateFromCode()         END....STATIC FUNCTION NoMostrar(oCol)IF valtype(oCol:value) = "N"    oCol:bStrData := { | | IF(oCol:value > 0 ,oCol:value,"NO EXISTE")}    oCol:bEditWhen := { | | oCol:value > 0 }    IF oCol:value > 0        oCol:nEditType := 1       ELSE            oCol:bClrStd := {|| {CLR_WHITE,CLR_RED }  }    ENDIF   ENDIF   RETURN nil   
User avatar
karinha
Posts: 7963
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Been thanked: 5 times
Contact:

Re: Cambiar color a celda xbrowse segun condicion

Post by karinha »

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
Posts: 7963
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Been thanked: 5 times
Contact:

Re: Cambiar color a celda xbrowse segun condicion

Post by karinha »

Mira:

Code: Select all | Expand

   BrwColors( oBrw )   WITH OBJECT oBrw      ...STATIC FUNCTION BrwColors( oBrw, lFoot )   local cClrBack   DEFAULT lFoot          := .F.   oBrw:l2007             := .F.   oBrw:nRowHeight        := 24   oBrw:nHeaderHeight     := 24    oBrw:lFooter           := lFoot      //oBrw:lRecordSelector     := .F.   //oBrw:lColDividerComplete := .F.   //oBrw:lRowDividerComplete := .F.      oBrw:lFlatStyle        := .T.   oBrw:bClrHeader        := { || { CLR_BLACK, CLR_WHITE, CLR_WHITE } } //RGB( 232, 255, 232 ), RGB( 232, 255, 232 ) }}   oBrw:lFullGrid         := .F.   oBrw:nRowDividerStyle  := LINESTYLE_NOLINES //DARKGRAY  //LINESTYLE_LIGHTGRAY      //   oBrw:nColDividerStyle  := LINESTYLE_NOLINES //LIGHTGRAY // LINESTYLE_NOLINES   oBrw:nMarqueeStyle := MARQSTYLE_HIGHLROW   oBrw:bClrStd = { || If( oBrw:KeyNo() % 2 == 0, ;                         { If( ( oBrw:cAlias )->( Deleted() ), CLR_HRED, CLR_BLUE ),;                           RGB( 198, 255, 198 ) }, ;                         { If( ( oBrw:cAlias )->( Deleted() ), CLR_HRED, CLR_BLUE ),;                           RGB( 232, 255, 232 ) } ) }   oBrw:bClrSel = { || { If( ( oBrw:cAlias )->( Deleted() ), CLR_HRED, CLR_WHITE ),;                           RGB( 34, 177, 76 ) } } //RGB( 0x33, 0x66, 0xCC ) } }      cClrBack = Eval( oBrw:bClrSelFocus )[ 2 ]   oBrw:bClrSelFocus  := { || { If( ( oBrw:cAlias )->( Deleted() ), CLR_HRED, CLR_WHITE ),;                              cClrBack } }   oBrw:SetColor( CLR_BLUE, RGB( 232, 255, 232 ) )   oBrw:SetFont( oFont1 )RETURN NIL 


Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
cmsoft
Posts: 1300
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina
Has thanked: 1 time
Been thanked: 3 times

Re: Cambiar color a celda xbrowse segun condicion

Post by cmsoft »

Gracias Jao por responder.
Los datos los tengo en un arreglo, no en un dbf, como puedo hacer referencia con el valor del datos de la columna, o del arreglo en todo caso?
Solo a la celda tengo que hacer referencia, el xbrowse tiene color con efecto pijama
User avatar
FranciscoA
Posts: 2164
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Cambiar color a celda xbrowse segun condicion

Post by FranciscoA »

Cesar, ya probaste con Detached Local?

Code: Select all | Expand

STATIC FUNCTION NoMostrar(oCol)IF valtype(oCol:value) = "N"    oCol:bStrData := { | | IF(oCol:value > 0 ,oCol:value,"NO EXISTE")}    oCol:bEditWhen := { | | oCol:value > 0 }    IF oCol:value > 0       oCol:nEditType := 1    ELSE           //oCol:bClrStd := {|| {CLR_WHITE,CLR_RED }  }           oCol:bClrStd := ColorDeCelda()    ENDIF  ENDIF   RETURN nil  Function ColorDeCelda()Return {|| {CLR_WHITE,CLR_RED }  } 

Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
Posts: 2164
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Cambiar color a celda xbrowse segun condicion

Post by FranciscoA »

Olvidalo, acabo de probarlo y no surte ningún efecto.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
Posts: 2164
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Cambiar color a celda xbrowse segun condicion

Post by FranciscoA »

Cesar, mira si esto es lo que buscas.

Code: Select all | Expand

//--------------------------------------------//Function CesarClrCelda()local oDlg, oBrw, oCollocal aData := {{1,"Articulo 1",10,12},{2,"Articulo 2",15,0},{3,"Articulo 3",0,15},{4,"Articulo 4",15,15}}DEFINE DIALOG oDlg SIZE 700,400 PIXEL TITLE "COLORES DE CELDAS SEGUN CONDICION"@ 40,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg ;      ARRAY aData ;          AUTOCOLS FASTEDIT;      SIZES 60,305,90,90,90,90,90,90,90,90;      CELL LINES  NOBORDER   for each oCol in oBrw:aCols      NoMostrar(oCol)   NEXT      WITH OBJECT oBrw      :nFreeze := 2      :CreateFromCode()         END   ACTIVATE DIALOG oDlg CENTEREDreturn nilSTATIC FUNCTION NoMostrar(oCol)IF valtype(oCol:value) = "N"    oCol:bStrData := { | | IF(oCol:value > 0 ,oCol:value,"NO EXISTE")}    oCol:bEditWhen := { | | oCol:value > 0 }    IF oCol:value > 0       oCol:nEditType := 1    ENDIF    oCol:bClrStd := ColorDeCelda( oCol )ENDIF  RETURN nil  Function ColorDeCelda( oCol )Return { || if(oCol:value <= 0, {CLR_WHITE,CLR_RED }, {CLR_BLACK, CLR_WHITE } ) } 

Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
cmsoft
Posts: 1300
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina
Has thanked: 1 time
Been thanked: 3 times

Re: Cambiar color a celda xbrowse segun condicion

Post by cmsoft »

Gracias Francisco!!
Efectivamente, tenía un error conceptual de donde debía poner el bClrStd.
En realidad siempre tenemos que indicarle la condición. Sino solo toma los valores del primer registro del xbrowse
Lo solucioné de esta forma (parecido a lo que vos me propones)

Code: Select all | Expand

STATIC FUNCTION NoMostrar(oCol)    oCol:bStrData := { | | IF(oCol:value > 0 ,oCol:value,"NO EXISTE")}    oCol:bEditWhen := { | | oCol:value > 0 }    oCol:bClrStd := {|| IF(oCol:value > 0, {CLR_BLACK,RGB(193,221,255) },{CLR_WHITE,CLR_RED })  }    oCol:nEditType := IF(oCol:value > 0,1,0)RETURN nil  

Muchas gracias por tu aporte!
User avatar
FranciscoA
Posts: 2164
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Cambiar color a celda xbrowse segun condicion

Post by FranciscoA »

cmsoft wrote:Gracias Francisco!!
Efectivamente, tenía un error conceptual de donde debía poner el bClrStd.
En realidad siempre tenemos que indicarle la condición. Sino solo toma los valores del primer registro del xbrowse
Lo solucioné de esta forma (parecido a lo que vos me propones)

Code: Select all | Expand

STATIC FUNCTION NoMostrar(oCol)    oCol:bStrData := { | | IF(oCol:value > 0 ,oCol:value,"NO EXISTE")}    oCol:bEditWhen := { | | oCol:value > 0 }    oCol:bClrStd := {|| IF(oCol:value > 0, {CLR_BLACK,RGB(193,221,255) },{CLR_WHITE,CLR_RED })  }    oCol:nEditType := IF(oCol:value > 0,1,0)RETURN nil  

Muchas gracias por tu aporte!


Magnifico, César!!
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
Post Reply