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, oCol
local 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 CENTERED
return nil

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
    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