Page 1 of 1

Colorized cell of xbrowse

Posted: Fri Mar 04, 2022 10:16 am
by Silvio.Falconi
I have to color the xbrowse cells on each line with a different color depending on the value of the cell, I made
WITH OBJECT oBrw

....
FOR i := 1 TO LEN(:aCols)
oCol := :aCols[ i ]
oCol:nWidth := 30
if i >1
oCol:bClrStd := {|i| { ChangeColor( oBrw, i ) } }
endif
NEXT

:CreateFromCode()
END

static function ChangeColor( oBrw, n )
return {|| { CLR_BLACK, ColorCell( oBrw:aRow[ n ]:VALUE ) } }

static function ColorCell( num )
local nColor := GetSysColor( 15 ) //for demo
local nColor1 := CLR_HGREEN
local nColor2 := CLR_HRED
local ncolor3 := GetSysColor( 15 )


/* IF num<3
nColor :=nColor1
elseif num>3
nColor := nColor2
elseif num<9
nColor := nColor3
endif*/

return nColor


where is the error ?

Re: Colorized cell of xbrowse

Posted: Fri Mar 04, 2022 11:39 am
by vilian
Silvio,

I think you should change this

oCol:bClrStd := {|i| { ChangeColor( oBrw, i ) } }

For this:

oCol:bClrStd := {|| { ChangeColor( oBrw, i ) } }

But "i" is the variable of the FOR and when the browse is created the value of "i" will be the size of oBrw:aCols + 1

Re: Colorized cell of xbrowse

Posted: Sat Mar 05, 2022 8:17 am
by Silvio.Falconi
vilian wrote:Silvio,

I think you should change this

oCol:bClrStd := {|i| { ChangeColor( oBrw, i ) } }

For this:

oCol:bClrStd := {|| { ChangeColor( oBrw, i ) } }

But "i" is the variable of the FOR and when the browse is created the value of "i" will be the size of oBrw:aCols + 1


the problem is then the function ChangeColor() not found the "i" variable

Re: Colorized cell of xbrowse

Posted: Sat Mar 05, 2022 10:56 am
by Marc Venken

Re: Colorized cell of xbrowse

Posted: Sat Mar 05, 2022 11:53 am
by Silvio.Falconi
Marc Venken wrote:Maybe you have also the issue with Detached Locals ?

http://forums.fivetechsupport.com/viewtopic.php?f=3&t=41373&hilit=detached+local


I need something of this
Image

Re: Colorized cell of xbrowse

Posted: Sun Mar 06, 2022 1:36 am
by nageswaragunupudi

Code: Select all | Expand

oCol:bClrStd := ChangeColor( oBrw, i )
 

Re: Colorized cell of xbrowse

Posted: Sun Mar 06, 2022 4:19 pm
by Silvio.Falconi
nageswaragunupudi wrote:

Code: Select all | Expand

oCol:bClrStd := ChangeColor( oBrw, i )
 


Nages,
give me error


WITH OBJECT oBrw
:nRowHeight := 22
:nClrBorder := CLR_GRAY
:lDrawBorder := .t.
:nColorBox := CLR_HRED
:nMarqueeStyle := MARQSTYLE_HIGHLWIN7
:lHscroll := .f.
:l2007 := .F.
:l2015 := .f.
:nStretchCol := STRETCHCOL_WIDEST
:lAllowRowSizing := .F.
:lAllowColSwapping := .F.
:lAllowColHiding := .F.
:lRecordSelector := .F.
:nColDividerStyle := LINESTYLE_LIGHTGRAY
:nRowDividerStyle := LINESTYLE_LIGHTGRAY
:nRowDividerStyle := LINESTYLE_NOLINES
:nColDividerStyle := LINESTYLE_LIGHTGRAY
:lDisplayZeros := .t. //Ineed the value zero
FOR i := 1 TO LEN(:aCols)
oCol := :aCols[ i ]
oCol:nWidth := 30
if i >1
oCol:bClrStd := ChangeColor( oBrw, i )
oCol:bClrSelFocus := {|| { CLR_BLACK, { { 1, RGB( 252, 235, 220 ), RGB( 255, 0,0 ) } }}}
endif
NEXT
:CreateFromCode()
:aCols[ 1 ]:nWidth := 100
:aCols[ 1 ]:nDataStrAlign := AL_LEFT
:SetStyle( 2018 )
end with


static function ChangeColor( oBrw, n )
return {|| { CLR_BLACK, ColorCell( oBrw:aRow[ n ]:VALUE ) } }

static function ColorCell( num )
local nColor := GetSysColor( 15 )
If num= 0
nColor := CLR_HGREEN
elseif num >0 .and. num < 8
nColor := CLR_WHITE
elseif num >9
nColor := CLR_HRED
endif
return nColor

Re: Colorized cell of xbrowse

Posted: Mon Mar 07, 2022 2:12 am
by FranciscoA
Silvio.Falconi wrote:
nageswaragunupudi wrote:

Code: Select all | Expand

oCol:bClrStd := ChangeColor( oBrw, i )
 


Nages,
give me error


WITH OBJECT oBrw
:nRowHeight := 22
:nClrBorder := CLR_GRAY
:lDrawBorder := .t.
:nColorBox := CLR_HRED
:nMarqueeStyle := MARQSTYLE_HIGHLWIN7
:lHscroll := .f.
:l2007 := .F.
:l2015 := .f.
:nStretchCol := STRETCHCOL_WIDEST
:lAllowRowSizing := .F.
:lAllowColSwapping := .F.
:lAllowColHiding := .F.
:lRecordSelector := .F.
:nColDividerStyle := LINESTYLE_LIGHTGRAY
:nRowDividerStyle := LINESTYLE_LIGHTGRAY
:nRowDividerStyle := LINESTYLE_NOLINES
:nColDividerStyle := LINESTYLE_LIGHTGRAY
:lDisplayZeros := .t. //Ineed the value zero
FOR i := 1 TO LEN(:aCols)
oCol := :aCols[ i ]
oCol:nWidth := 30
if i >1
oCol:bClrStd := ChangeColor( oBrw, i )
oCol:bClrSelFocus := {|| { CLR_BLACK, { { 1, RGB( 252, 235, 220 ), RGB( 255, 0,0 ) } }}}
endif
NEXT
:CreateFromCode()
:aCols[ 1 ]:nWidth := 100
:aCols[ 1 ]:nDataStrAlign := AL_LEFT
:SetStyle( 2018 )
end with


static function ChangeColor( oBrw, n )
return {|| { CLR_BLACK, ColorCell( oBrw:aRow[ n ]:VALUE ) } }

static function ColorCell( num )
local nColor := GetSysColor( 15 )
If num= 0
nColor := CLR_HGREEN
elseif num >0 .and. num < 8
nColor := CLR_WHITE
elseif num >9
nColor := CLR_HRED
endif
return nColor



Code: Select all | Expand

static function ChangeColor( oBrw, n )
//return {|| { CLR_BLACK, ColorCell( oBrw:aRow[ n ]:VALUE ) } }    //Aquí hay un error. Cambia esta linea por la siguiente.  //There is an error here. Change this line to the next.
return {|| { CLR_BLACK, ColorCell( oBrw:aRow[ n ] ) } }
 

Re: Colorized cell of xbrowse

Posted: Mon Mar 07, 2022 11:42 am
by Silvio.Falconi
I have also error

Error occurred at: 07-03-2022, 12:37:57
Error description: Error BASE/1075 Parametro errato: >
Args:
[ 1] = U
[ 2] = N 0

Stack Calls
===========
Called from: source\tipico.prg => COLORCELL( 189 )
Called from: source\tipico.prg => (b)CHANGECOLOR( 183 )


the xbrowse

Code: Select all | Expand


@ 90, 10 XBROWSE  oBrw OF oDlgRitardo  SIZE -10,-80 PIXEL NOBORDER
      oBrw:SetArray(aData,,,.F.)
      SetupBrowserRit(oBrw)
 



proc SetupBrowserTip(oBrw)

Code: Select all | Expand


proc SetupBrowserTip(oBrw)
   ADD COLUMN TO oBrw HEADER "Combinazione" DATA {|v,oCol| oCol:oBrw:aArrayData[oCol:oBrw:nArrayAt,1] } CENTER
   ADD COLUMN TO oBrw HEADER "Ba"     DATA {|v,oCol| oCol:oBrw:aArrayData[oCol:oBrw:nArrayAt,2] } CENTER
   ADD COLUMN TO oBrw HEADER "Ca"     DATA {|v,oCol| oCol:oBrw:aArrayData[oCol:oBrw:nArrayAt,3] } CENTER
   ADD COLUMN TO oBrw HEADER "FI"     DATA {|v,oCol| oCol:oBrw:aArrayData[oCol:oBrw:nArrayAt,4] } CENTER
   ADD COLUMN TO oBrw HEADER "Ge"     DATA {|v,oCol| oCol:oBrw:aArrayData[oCol:oBrw:nArrayAt,5] } CENTER
   ADD COLUMN TO oBrw HEADER "Mi"     DATA {|v,oCol| oCol:oBrw:aArrayData[oCol:oBrw:nArrayAt,6] } CENTER
   ADD COLUMN TO oBrw HEADER "Na"     DATA {|v,oCol| oCol:oBrw:aArrayData[oCol:oBrw:nArrayAt,7] } CENTER
   ADD COLUMN TO oBrw HEADER "Pa"     DATA {|v,oCol| oCol:oBrw:aArrayData[oCol:oBrw:nArrayAt,8] } CENTER
   ADD COLUMN TO oBrw HEADER "Ro"     DATA {|v,oCol| oCol:oBrw:aArrayData[oCol:oBrw:nArrayAt,9] } CENTER
   ADD COLUMN TO oBrw HEADER "To"     DATA {|v,oCol| oCol:oBrw:aArrayData[oCol:oBrw:nArrayAt,10] } CENTER
   ADD COLUMN TO oBrw HEADER "Ve"     DATA {|v,oCol| oCol:oBrw:aArrayData[oCol:oBrw:nArrayAt,11] } CENTER
   ADD COLUMN TO oBrw HEADER "Nz"     DATA {|v,oCol| oCol:oBrw:aArrayData[oCol:oBrw:nArrayAt,12] } CENTER


   WITH OBJECT oBrw
 

      :nRowHeight    := 22
      :nClrBorder := CLR_GRAY
      :lDrawBorder := .t.
      :nColorBox := CLR_HRED
      :nMarqueeStyle       := MARQSTYLE_HIGHLWIN7
      :lHscroll            := .f.
      :l2007               := .F.
      :l2015               := .f.
      :nStretchCol         := STRETCHCOL_WIDEST
      :lAllowRowSizing     := .F.
      :lAllowColSwapping   := .F.
      :lAllowColHiding     := .F.
      :lRecordSelector     := .F.
      :nColDividerStyle    := LINESTYLE_LIGHTGRAY
      :nRowDividerStyle    := LINESTYLE_LIGHTGRAY
      :nRowDividerStyle    := LINESTYLE_NOLINES
      :nColDividerStyle    := LINESTYLE_LIGHTGRAY
      :lDisplayZeros       := .t.

        FOR i := 1 TO LEN(:aCols)
         oCol := :aCols[ i ]
         oCol:nWidth   := 30
         if i >1  
               oCol:bClrStd := ChangeColor( oBrw, i )
           endif
      NEXT

     
      :CreateFromCode()
      :aCols[ 1 ]:nWidth   := 100
      :aCols[ 1 ]:nDataStrAlign   := AL_LEFT
      :SetStyle( 2018 )
   end with
Return nil
//--------------------------------------------------------------------------------//
static function ChangeColor( oBrw, n )
return {|| { CLR_BLACK, ColorCell( oBrw:aRow[ n ]) } }

static function ColorCell( num )
   local nColor  :=  GetSysColor( 15 )
   If num= 0
      nColor := CLR_HGREEN
    elseif num >0 .and. num < 8
      nColor := CLR_WHITE
    elseif num >9
        nColor := CLR_HRED
     endif
     return nColor



 

Re: Colorized cell of xbrowse

Posted: Mon Mar 07, 2022 1:56 pm
by Jimmy
hi Silvio,

you try to "add" Codeblock in a Loop but your "Counter" does not work that Way.

you need to use a "String" to build a Codeblock so this might work

Code: Select all | Expand

LOCAL cString := "{|| { CLR_BLACK, ColorCell( oBrw:aRow[" + STR( n ) + "] ) } }"
RETURN &cString

Re: Colorized cell of xbrowse - Resolved!!

Posted: Tue Mar 08, 2022 12:30 pm
by Silvio.Falconi
Resolved!!!

Image

FOR i := 2 TO LEN(:aCols)
oCol := :aCols[ i ]
oCol:nWidth := 30
:aCols[ i ]:bClrStd := ChangeColor( oBrw, i )
NEXT

Re: Colorized cell of xbrowse

Posted: Tue Mar 08, 2022 12:39 pm
by Silvio.Falconi
If I use
:nMarqueeStyle := MARQSTYLE_HIGHLWIN7
the n I not see the right color

How I can to hav the bar nmarquee on only first column ?

Re: Colorized cell of xbrowse

Posted: Wed Mar 09, 2022 1:13 am
by FranciscoA
Silvio.Falconi wrote:How I can to hav the bar nmarquee on only first column ?


I do it like that:

Code: Select all | Expand

  WITH OBJECT oBrw
      :nMarqueeStyle       := MARQSTYLE_HIGHLCELL
      :lColChangeNotify  := .t.  
      :bChange               := { |o| if( o:nColSel<>1, ( o:nColSel:=1, o:RefreshCurrent() ), nil ) }
      :CreateFromCode()
   END

Re: Colorized cell of xbrowse

Posted: Wed Mar 09, 2022 12:19 pm
by Silvio.Falconi
THANKS

Image