Page 1 of 1

Dynamic Colors in GRID

Posted: Tue Sep 02, 2008 8:52 pm
by esgici
Hi to all

I can't succeed dynamically set/changing back and fore colors of GRID cells.

Here my unsucceed :( code :

Code: Select all


#include "minigui.ch"

PROC Main()

    PRIV aGrdDFC   := ARRAY( 3 )      // GRID Dynamic Fore Colors   
         aCitizens := {}
         
    DEFINE WINDOW Form_1 ;
        AT 0,0 ;
        WIDTH 500 ;
        HEIGHT 400 ;
        TITLE 'Test Dynamic Colors' ;
        MAIN ;
        ON INIT FillGrid()
        
        DEFINE GRID Grid_1
            ROW     10
            COL     10
            WIDTH   450
            HEIGHT  330
            HEADERS {'Last Name','First Name','Phone'}
            WIDTHS  {140,140,140}
            ITEMS   { { '','',''} }
            VALUE   1
        END GRID

    END WINDOW

    Form_1.Center

    Form_1.Activate

RETU // Main()

*------------------------------------------------------------------------

PROC FillGrid()

  LOCA aItems :={ {'Simpson','Homer','555-5555' },;
                  {'Mulder','Fox','324-6432'},;
                  {'Smart','Max','432-5892'},;
                  {'Grillo','Pepe','894-2332'},;
                  {'Kirk','James','346-9873'},;
                  {'Barriga','Carlos','394-9654'},;
                  {'Flanders','Ned','435-3211'},;
                  {'Smith','John','123-1234'},;
                  {'Pedemonti','Flavio','000-0000'},;
                  {'Gomez','Juan','583-4832'},;
                  {'Fernandez','Raul','321-4332'},;
                  {'Borges','Javier','326-9430'},;
                  {'Alvarez','Alberto','543-7898'},;
                  {'Gonzalez','Ambo','437-8473'},;
                  {'Batistuta','Gol','485-2843'},;
                  {'Vinazzi','Amigo','394-5983'},;
                  {'Pedemonti','Flavio','534-7984'},;
                  {'Samarbide','Armando','854-7873'},;
                  {'Pradon','Alejandra','???-????'},;
                  {'Reyes','Monica','432-5836'} }
                  
   Form_1.Grid_1.DeleteAllItems()
   
   AEVAL( aItems, { | a1 | Form_1.Grid_1.AddItem( a1 ) } )

   AEVAL( aItems, { | a1 | AADD( aCitizens, LEFT( a1[ 3 ], 1 ) == "5" ) } )
   
   AFILL( aGrdDFC, { || IF( aCitizens[ This.CellRowIndex ], RED, GREEN ) } )     

   *** Form_1.Grid_1.DynamicForeColor := aGrdDFC  => syntax error at '.'
   
   SetProperty ( 'Form_1', 'Grid_1', 'DYNAMICFORECOLOR', aGrdDFC )      

RETU // FillGrid()
Any opinion :?:

Regards

--

esgici

Re: Dynamic Colors in GRID

Posted: Wed Sep 03, 2008 8:01 am
by gfilatov
esgici wrote:Hi to all

I can't succeed dynamically set/changing back and fore colors of GRID cells.

...

Any opinion :?:
Hi Esgici,

Try the following working sample:

Code: Select all

#include "minigui.ch"

PROC Main()

    PRIV bColor1 := {|| NIL }
    PRIV bColor2 := { || if ( LEFT( This.CellValue, 1 ) == "5" , RED, GREEN ) }
         
    DEFINE WINDOW Form_1 ;
        AT 0,0 ;
        WIDTH 500 ;
        HEIGHT 400 ;
        TITLE 'Test Dynamic Colors' ;
        MAIN ;
        ON INIT FillGrid()
        
        DEFINE GRID Grid_1
            ROW     10
            COL     10
            WIDTH   450
            HEIGHT  330
            HEADERS {'Last Name','First Name','Phone'}
            WIDTHS  {140,140,140}
            ITEMS   { { '','',''} }
            VALUE   1
            DYNAMICFORECOLOR { bColor1, bColor1, bColor2 } 
        END GRID

    END WINDOW

    Form_1.Center

    Form_1.Activate

RETU // Main()

*------------------------------------------------------------------------

PROC FillGrid()

  LOCA aItems :={ {'Simpson','Homer','555-5555' },;
                  {'Mulder','Fox','324-6432'},;
                  {'Smart','Max','432-5892'},;
                  {'Grillo','Pepe','894-2332'},;
                  {'Kirk','James','346-9873'},;
                  {'Barriga','Carlos','394-9654'},;
                  {'Flanders','Ned','435-3211'},;
                  {'Smith','John','123-1234'},;
                  {'Pedemonti','Flavio','000-0000'},;
                  {'Gomez','Juan','583-4832'},;
                  {'Fernandez','Raul','321-4332'},;
                  {'Borges','Javier','326-9430'},;
                  {'Alvarez','Alberto','543-7898'},;
                  {'Gonzalez','Ambo','437-8473'},;
                  {'Batistuta','Gol','485-2843'},;
                  {'Vinazzi','Amigo','394-5983'},;
                  {'Pedemonti','Flavio','534-7984'},;
                  {'Samarbide','Armando','854-7873'},;
                  {'Pradon','Alejandra','???-????'},;
                  {'Reyes','Monica','432-5836'} }
                  
   Form_1.Grid_1.DeleteAllItems()
   
   AEVAL( aItems, { | a1 | Form_1.Grid_1.AddItem( a1 ) } )

RETU // FillGrid()

Re: Dynamic Colors in GRID

Posted: Wed Sep 03, 2008 12:44 pm
by esgici
gfilatov wrote:
Try the following working sample
Thanks gfilatov.

This method is already used.

You are assigned value at design time.

This means that "DYNAMICxxxCOLOR property of GRID doesn't accept value at run time "?

Regards

--

esgici

Re: Dynamic Colors in GRID

Posted: Wed Sep 03, 2008 1:06 pm
by gfilatov
esgici wrote:
gfilatov wrote: ...
This means that "DYNAMICxxxCOLOR property of GRID doesn't accept value at run time "?
esgici,

Sure. And reference should be updated as following
-------------------------------------------------------------------------------
@...GRID / DEFINE GRID: Creates a grid control.
-------------------------------------------------------------------------------
...
- Properties:
...
- DynamicBackColor (D)
- DynamicForeColor (D)
...

D: Available at control definition only
But the following sample have a trick:

Code: Select all

#include "minigui.ch"

PROC Main()

    PRIV bColor1 := {|| NIL}
    PRIV bColor2 := { || if ( LEFT( This.CellValue, 1 ) == "5" , RED, GREEN ) }
         
    DEFINE WINDOW Form_1 ;
        AT 0,0 ;
        WIDTH 500 ;
        HEIGHT 400 ;
        TITLE 'Test Dynamic Colors' ;
        MAIN ;
        ON INIT FillGrid()
        
        DEFINE GRID Grid_1
            ROW     10
            COL     10
            WIDTH   450
            HEIGHT  330
            HEADERS {'Last Name','First Name','Phone'}
            WIDTHS  {140,140,140}
            ITEMS   { { '','',''} }
            VALUE   1
            DYNAMICFORECOLOR { bColor1, bColor1, bColor1 }
        END GRID

    END WINDOW

    Form_1.Center

    Form_1.Activate

RETU // Main()

*------------------------------------------------------------------------

PROC FillGrid()

  LOCA k := GetControlIndex( 'Grid_1', 'Form_1' )
  LOCA aItems :={ {'Simpson','Homer','555-5555' },;
                  {'Mulder','Fox','324-6432'},;
                  {'Smart','Max','432-5892'},;
                  {'Grillo','Pepe','894-2332'},;
                  {'Kirk','James','346-9873'},;
                  {'Barriga','Carlos','394-9654'},;
                  {'Flanders','Ned','435-3211'},;
                  {'Smith','John','123-1234'},;
                  {'Pedemonti','Flavio','000-0000'},;
                  {'Gomez','Juan','583-4832'},;
                  {'Fernandez','Raul','321-4332'},;
                  {'Borges','Javier','326-9430'},;
                  {'Alvarez','Alberto','543-7898'},;
                  {'Gonzalez','Ambo','437-8473'},;
                  {'Batistuta','Gol','485-2843'},;
                  {'Vinazzi','Amigo','394-5983'},;
                  {'Pedemonti','Flavio','534-7984'},;
                  {'Samarbide','Armando','854-7873'},;
                  {'Pradon','Alejandra','???-????'},;
                  {'Reyes','Monica','432-5836'} }
                  
   Form_1.Grid_1.DeleteAllItems()
   
   AEVAL( aItems, { | a1 | Form_1.Grid_1.AddItem( a1 ) } )

   _HMG_SYSDATA [ 40 ] [ k ] [ 4 ] := { bColor1, bColor1, bColor2 }

   _HMG_DOGRIDREFRESH ( k )

RETU // FillGrid()

Re: Dynamic Colors in GRID

Posted: Wed Sep 03, 2008 3:12 pm
by Roberto Lopez
...
This means that "DYNAMICxxxCOLOR property of GRID doesn't accept value at run time "?

esgici,

Sure. And reference should be updated as following
Anyway, DynamicBackColor and DynamicForecolor data is stored in control arrays and could be easy, access to it to modify at runtime.

Besides, it could be a good idea to add support to it in SetPtoperty and GetProperty functions.

Regards,

Roberto.