31 de mayo de 2005

Grid con múltiples colores

Los Grids de Visual FoxPro tienen la capacidad de cambiar de color sus filas, aquí te presentamos una forma en que puede darle más capacidad.

Los ejemplos que vienen con la documentación de la ayuda en el método SetAll muestran cómo hacer cambiar las filas basándose en la ejecución sencilla de un IIF (If inmediato) como por ejemplo:

Thisform::Init
*** Alternar columnas entre blanco y verde ***
Thisform.MyGrid.SetAll("DynamicBackColor", ;
  "IIF(MOD(RECNO( ), 2)=0, RGB(255,255,255), RGB(0,255,0))", ;
  "Column") 

Hasta aqui puede ser sencillo, pero que tal si deseas tener mas de 2 o 3 colores?, o si es un número finito de posibles colores?, la solución es mandar a ejecutar una función o método que haga lo propio.

Un ejemplo de uso, un form donde se colorean las lineas del grid de acuerdo a la edad de la persona:
Public oForm
oForm = Createobject("myForm")
oForm.Show()

Define Class myForm As Form
  DataSession = 2
  Height = 400
  Width = 600

  Add Object myGrid As Grid With ;
    Height = 400, Width = 600, RecordSource="employee"

  Procedure Load
    OPEN DATABASE (HOME(2)+"\data\testdata.DBC")
    Use employee
  Endproc

  Procedure Init
This.MyGrid.SetAll("DynamicBackColor","Thisform.MyColorByYear(birth_date)","Column")
  Endproc

PROCEDURE myColorbyYear
   LPARAMETERS tdBirthDate
      lnColor = 0xFFFFFF && Blanco por default
      lnAnnios = YEAR(DATE())-YEAR(tdBirthDate)

      DO CASE
        CASE BETWEEN(lnAnnios,20,40)
            lnColor = RGB(100,100,150)
        CASE BETWEEN(lnAnnios,41,45)
            lnColor = RGB(255,255,0)
        CASE BETWEEN(lnAnnios,46,50)
            lnColor = RGB(255,100,0)
        CASE BETWEEN(lnAnnios,51,60)
            lnColor = RGB(255,0,0)
        CASE BETWEEN(lnAnnios,61,90)
            lnColor = RGB(0,255,0)
      ENDCASE

      RETURN lnColor
ENDPROC

  PROCEDURE Unload
     CLOSE TABLES ALL
     CLOSE DATABASES ALL
  ENDPROC

Enddefine



En este caso está establecido a sólo 5 colores, pero podría llevarse hasta el caso en que se utilice una tabla auxiliar donde se tengan almacenados estos datos, para de esta forma darle aún más dinamicidad a esta función.

Espero les sea de utilidad.

Espartaco Palma Martínez

No hay comentarios. :

Publicar un comentario