Cambiar color a celda xbrowse segun condicion

Cambiar color a celda xbrowse segun condicion

Postby cmsoft » Mon Sep 26, 2022 2:18 pm

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 view

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
cmsoft
 
Posts: 1189
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Cambiar color a celda xbrowse segun condicion

Postby karinha » Mon Sep 26, 2022 2:27 pm

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

Re: Cambiar color a celda xbrowse segun condicion

Postby karinha » Mon Sep 26, 2022 2:30 pm

Mira:

Code: Select all  Expand view


   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
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Cambiar color a celda xbrowse segun condicion

Postby cmsoft » Mon Sep 26, 2022 4:30 pm

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
cmsoft
 
Posts: 1189
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Cambiar color a celda xbrowse segun condicion

Postby FranciscoA » Mon Sep 26, 2022 7:56 pm

Cesar, ya probaste con Detached Local?

Code: Select all  Expand view
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: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Cambiar color a celda xbrowse segun condicion

Postby FranciscoA » Mon Sep 26, 2022 8:57 pm

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

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

Re: Cambiar color a celda xbrowse segun condicion

Postby FranciscoA » Mon Sep 26, 2022 10:06 pm

Cesar, mira si esto es lo que buscas.
Code: Select all  Expand view
//--------------------------------------------//
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
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Cambiar color a celda xbrowse segun condicion

Postby cmsoft » Tue Sep 27, 2022 12:50 am

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 view

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
cmsoft
 
Posts: 1189
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Cambiar color a celda xbrowse segun condicion

Postby FranciscoA » Tue Sep 27, 2022 6:17 pm

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 view

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
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 84 guests