FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Cambiar color a celda xbrowse segun condicion
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Cambiar color a celda xbrowse segun condicion
Posted: Mon Sep 26, 2022 02: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 (fw): Select all Collapse
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
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM
Re: Cambiar color a celda xbrowse segun condicion
Posted: Mon Sep 26, 2022 02:27 PM
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM
Re: Cambiar color a celda xbrowse segun condicion
Posted: Mon Sep 26, 2022 02:30 PM
Mira:

Code (fw): Select all Collapse
   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
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: Cambiar color a celda xbrowse segun condicion
Posted: Mon Sep 26, 2022 04: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

Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Cambiar color a celda xbrowse segun condicion
Posted: Mon Sep 26, 2022 07:56 PM
Cesar, ya probaste con Detached Local?

Code (fw): Select all Collapse
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
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Cambiar color a celda xbrowse segun condicion
Posted: Mon Sep 26, 2022 08:57 PM

Olvidalo, acabo de probarlo y no surte ningún efecto.

Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Cambiar color a celda xbrowse segun condicion
Posted: Mon Sep 26, 2022 10:06 PM
Cesar, mira si esto es lo que buscas.
Code (fw): Select all Collapse
//--------------------------------------------//
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
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: Cambiar color a celda xbrowse segun condicion
Posted: 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 (fw): Select all Collapse
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!
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Cambiar color a celda xbrowse segun condicion
Posted: Tue Sep 27, 2022 06: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 (fw): Select all Collapse
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

Continue the discussion