Color en Renglones de Grid

86 views
Skip to first unread message

Javier Bernal

unread,
Mar 7, 2016, 3:38:15 PM3/7/16
to Comunidad de Visual Foxpro en Español
Quien me puede ayudar para asignar un color a un renglon de un grid, actualmente uso eso IIF(MOD(RECNO(),2)=1,RGB(255,255,255),RGB(145,231,180)), y me funciona bien cuando la tabla tiene un orden de como se fueron agregando los registros, pero si los ordenas por otro valor pierde la secuencia de los colores que quiero mostrar es decir pueden venir dos del mismo color seguidos.

De antemano les agradezco sus respuestas y sus aportaciones.

Saludos y Animo 

Luis Maria Guayan

unread,
Mar 7, 2016, 3:43:52 PM3/7/16
to publice...@googlegroups.com
Mira este código de Carlos Alloatti:

PUBLIC oform1

oform1=NEWOBJECT("form1")
oform1.SHOW
RETURN

**************************************************
DEFINE CLASS form1 AS FORM

  DATASESSION = 2
  HEIGHT = 372
  WIDTH = 757
  DOCREATE = .T.
  AUTOCENTER = .T.
  CAPTION = "Form1"
  ALLOWOUTPUT = .F.
  NAME = "Form1"

  ADD OBJECT grid1 AS GRID WITH ;
    ANCHOR = 15, ;
    ALLOWHEADERSIZING = .F., ;
    ALLOWROWSIZING = .F., ;
    DELETEMARK = .F., ;
    GRIDLINES = 0, ;
    HEIGHT = 312, ;
    LEFT = 12, ;
    RECORDMARK = .F., ;
    SPLITBAR = .F., ;
    TOP = 12, ;
    WIDTH = 732, ;
    ALLOWCELLSELECTION = .F., ;
    NAME = "Grid1"

  ADD OBJECT command1 AS COMMANDBUTTON WITH ;
    TOP = 336, ;
    LEFT = 24, ;
    HEIGHT = 27, ;
    WIDTH = 84, ;
    ANCHOR = 6, ;
    CAPTION = "Refresh Grid", ;
    NAME = "Command1"

  ADD OBJECT command2 AS COMMANDBUTTON WITH ;
    TOP = 336, ;
    LEFT = 144, ;
    HEIGHT = 27, ;
    WIDTH = 84, ;
    ANCHOR = 6, ;
    CAPTION = "Order 0", ;
    NAME = "Command2"

  ADD OBJECT command3 AS COMMANDBUTTON WITH ;
    TOP = 336, ;
    LEFT = 228, ;
    HEIGHT = 27, ;
    WIDTH = 84, ;
    ANCHOR = 6, ;
    CAPTION = "Order 1", ;
    NAME = "Command3"

  ADD OBJECT command4 AS COMMANDBUTTON WITH ;
    TOP = 336, ;
    LEFT = 312, ;
    HEIGHT = 27, ;
    WIDTH = 84, ;
    ANCHOR = 6, ;
    CAPTION = "Order 2", ;
    NAME = "Command4"

  ADD OBJECT command5 AS COMMANDBUTTON WITH ;
    TOP = 336, ;
    LEFT = 396, ;
    HEIGHT = 27, ;
    WIDTH = 84, ;
    ANCHOR = 6, ;
    CAPTION = "Order 3", ;
    NAME = "Command5"

  ADD OBJECT command6 AS COMMANDBUTTON WITH ;
    TOP = 336, ;
    LEFT = 480, ;
    HEIGHT = 27, ;
    WIDTH = 84, ;
    ANCHOR = 6, ;
    CAPTION = "Order 4", ;
    NAME = "Command6"

  ADD OBJECT command7 AS COMMANDBUTTON WITH ;
    TOP = 336, ;
    LEFT = 564, ;
    HEIGHT = 27, ;
    WIDTH = 84, ;
    ANCHOR = 6, ;
    CAPTION = "Order 5", ;
    NAME = "Command7"

  PROCEDURE getrowvalues
    *!* GetRowValues
    #DEFINE ROLE_SYSTEM_TABLE      24
    #DEFINE ROLE_SYSTEM_COLUMNHEADER  25
    #DEFINE ROLE_SYSTEM_ROWHEADER    26
    #DEFINE ROLE_SYSTEM_COLUMN      27
    #DEFINE ROLE_SYSTEM_ROW        28
    #DEFINE ROLE_SYSTEM_CELL      29
    #DEFINE ROLE_SYSTEM_TEXT      42
    #DEFINE OBJID_CLIENT        0xFFFFFFFC

    LPARAMETERS poGrid

    LOCAL ;
      lHwnd, ;
      ldwObjectID, ;
      lRiid, ;
      loxForm, ;
      loxGrid, ;
      loxView1, ;
      lnRowCount, ;
      lnx

    m.poGrid.REFRESH()

    *!* Get the accesible object for the client window area of the form
    DECLARE INTEGER AccessibleObjectFromWindow IN oleacc.DLL ;
      INTEGER nhwnd, ;
      INTEGER dwObjectID, ;
      STRING riid, ;
      OBJECT @ppvObject

    m.lHwnd = THISFORM.HWND
    m.ldwObjectID = OBJID_CLIENT
    m.lRiid = 0hE03687613D3CCF11810C00AA00389B71
    m.loxForm = 0

    AccessibleObjectFromWindow(m.lHwnd, m.ldwObjectID , m.lRiid, @m.loxForm)

    IF VARTYPE(m.loxForm) # "O" THEN
      RETURN 0
    ENDIF

    *!* Find the grid name passed as parameter
    FOR lnx = 1 TO m.loxForm.accChildCount

      IF m.loxForm.accChild(m.lnx).accName(0) == m.poGrid.NAME THEN
        EXIT
      ENDIF

    ENDFOR

    m.loxGrid = m.loxForm.accChild(m.lnx)

    *!* Get the "View 1" container inside grid, child object # 2
    m.loxView = m.loxGrid.accChild(2)

    *!* Find the visible rows (by role type)
    m.lnRowCount = 0

    FOR lnx = 1 TO m.loxView.accChildCount

      IF m.loxView.accChild(m.lnx).accRole(0) # ROLE_SYSTEM_ROW THEN
        LOOP
      ENDIF

      m.lnRowCount = m.lnRowCount + 1

      *!* Save textbox value of first column (field value of first column for the row)
      DIMENSION THISFORM.RowValues(m.lnRowCount)
      THISFORM.RowValues(m.lnRowCount) = ALLTRIM(TRANSFORM(m.loxView.accChild(m.lnx).accChild(1).accChild(1).accValue))

    ENDFOR

    THISFORM.RowCount = m.lnRowCount

    m.loxView = NULL
    m.loxGrid = NULL
    m.loxForm = NULL

    RETURN m.lnRowCount
  ENDPROC

  PROCEDURE setorder
    LPARAMETERS pnOrder

    SET ORDER TO pnOrder

    THISFORM.getrowvalues(THISFORM.grid1)

    THISFORM.REFRESH()
  ENDPROC

  *-- Specifies the background color of a Column object and is re-evaluated at run time each time the Grid control is refreshed.
  PROCEDURE DYNAMICBACKCOLOR
    LPARAMETERS pValue

    LOCAL ;
      lnx

    FOR lnx = 1 TO THISFORM.RowCount
      IF THISFORM.RowValues(m.lnx) == ALLTRIM(TRANSFORM(m.pValue)) THEN
        EXIT
      ENDIF
    ENDFOR

    IF MOD(m.lnx, 2) = 0 THEN
      RETURN RGB(255,255,224)
    ELSE
      RETURN RGB(255,255,255)
    ENDIF
  ENDPROC

  PROCEDURE INIT
    THISFORM.ADDPROPERTY("RowValues[1]", "")
    THISFORM.ADDPROPERTY("RowCount", 0)

    *!* DynamicBackColor applies to column, but "This" refers to the grid instead of the column
    THISFORM.grid1.SETALL("DynamicBackColor", "Thisform.DynamicBackColor(Evaluate(This.Columns(1).ControlSource))")

    THISFORM.grid1.COLUMNS(1).VISIBLE = .F.

    THISFORM.getrowvalues(THISFORM.grid1)

    THISFORM.grid1.REFRESH()
  ENDPROC

  PROCEDURE LOAD
    *!* Setup some demo data, we need the first field to be unique, we will hice the first column latter

    LOCAL ;
      lcExp, ;
      lnx

    SELECT SYS(2015) AS KEYFIELD, * FROM HOME(2) + "TASTRADE\DATA\CUSTOMER.DBF" INTO CURSOR SYS(2015) READWRITE

    FOR lnx = 1 TO 5

      m.lcExp = FIELD(m.lnx + 1)

      INDEX ON &lcExp TAG (SYS(2015))

    ENDFOR
  ENDPROC

  PROCEDURE command1.CLICK
    THISFORM.getrowvalues(THISFORM.grid1)

    THISFORM.grid1.REFRESH()
  ENDPROC

  PROCEDURE command2.CLICK
    THISFORM.setorder(VAL(RIGHT(THIS.CAPTION,1)))
  ENDPROC

  PROCEDURE command3.CLICK
    THISFORM.setorder(VAL(RIGHT(THIS.CAPTION,1)))
  ENDPROC

  PROCEDURE command4.CLICK
    THISFORM.setorder(VAL(RIGHT(THIS.CAPTION,1)))
  ENDPROC

  PROCEDURE command5.CLICK
    THISFORM.setorder(VAL(RIGHT(THIS.CAPTION,1)))
  ENDPROC

  PROCEDURE command6.CLICK
    THISFORM.setorder(VAL(RIGHT(THIS.CAPTION,1)))
  ENDPROC

  PROCEDURE command7.CLICK
    THISFORM.setorder(VAL(RIGHT(THIS.CAPTION,1)))
  ENDPROC

ENDDEFINE
**************************************************


Luis María Guayán
Tucumán, Argentina
_______________________________
Comunidad Visual FoxPro en Español
http://comunidadvfp.blogspot.com

El 07/03/16 a las 17:38, Javier Bernal escribió:

Luis la Romana

unread,
Mar 7, 2016, 3:53:20 PM3/7/16
to Comunidad de Visual Foxpro en Español
Es largo ese código pero yo tambien voy a probarlo, me sería útil.

Víctor Hugo Espínola Domínguez

unread,
Mar 7, 2016, 8:08:03 PM3/7/16
to publice...@googlegroups.com
Adjunto clase y form de ejemplo.


Saludos,
Víctor.
Lambaré - Paraguay.

GridSort._rar
Reply all
Reply to author
Forward
0 new messages