COMO COLOREAR UNA UNICA CELDA DE UN GRID?

609 views
Skip to first unread message

Jimmy Pozo

unread,
Jul 18, 2010, 9:42:07 AM7/18/10
to Comunidad de Visual Foxpro en Español
Hola a todos,

Por favor, me permito preguntarles como puedo hacer para colorear una
celda de un grid? NO me refiero a una fila completa sino unicamente a
una celda en especial asi como en Excel puedes colorear la celda B10?
esto es super necesario cuando necesitas que de una tabla/cursor se
ilumine un registro en particular,

Mil gracias

Walter R. Ojeda Valiente

unread,
Jul 18, 2010, 12:45:09 PM7/18/10
to publice...@googlegroups.com
Hola Jimmy

Conozco una forma para colorear solamente una celda de una grilla, no es muy corta pero es la que conozco. Allí va:


If you want to add colour coding to a grid to be able to visually differentiate between records and/or cells, add 2 new fields (fore_color C(11), back_color C(11)) to the .RecordSource table of Grid1.

Add a new form method called .mGridColours() and a new form property called .nRecNo.

In the .Init event of Grid1 put:-

THISFORM.nRecNo = RECN([TABLENAME])
THIS.Refresh()

In the .AfterRowColChange() event of Grid1 put:-

THISFORM.nRecNo = RECN([TABLENAME])
THIS.Refresh()

In the .Column(s) of the grid set .Sparse = .F. and .DynamicCurrentControl = THISFORM.mGridColours().

In the .mGridColours() method put:-

WITH THISFORM.Grid1
    DO CASE
    CASE THISFORM.nRecNo = RECN([TABLENAME])
        .Column1.Text1.Forecolor = RGB(255,255,255)
        .Column1.Text1.Backcolor = RGB(0,0,128)
    CASE TABLENAME.fore_color = [R/W]
        .Column1.Text1.Forecolor = RGB(255,0,0)
        .Column1.Text1.Backcolor = RGB(255,255,255)
    CASE TABLENAME.fore_color = [B/W]
        .Column1.Text1.Forecolor = RGB(0,255,0)
        .Column1.Text1.Backcolor = RGB(255,255,255)
    CASE TABLENAME.fore_color = [G/W]
        .Column1.Text1.Forecolor = RGB(0,0,255)
        .Column1.Text1.Backcolor = RGB(255,255,255)
    ENDC   
ENDW

You will find the .Forecolor properties of the cells will reflect the value selected by TABLENAME.fore_color, with the currently selected record highlighted.

If you want the fields TABLENAME.fore_color and TABLENAME.back_color to determine the colours displayed, then :-

    DO CASE
    CASE ALLT(TABLENAME.fore_color) = [255,255,0]
        lcColor = [.Column1.Text1.Forecolor = RGB(]+ALLT(TABLENAME.fore_color)+[)]
        &lcColor
        lcColor = [.Column1.Text1.Backcolor = RGB(]+ALLT(TABLENAME.back_color)+[)]
        &lcColor
    ENDC

 

Si tienes alguna duda, pregunta.

Saludos.

Walter.









Hotmail: Trusted email with powerful SPAM protection. Sign up now.

ZeRoberto

unread,
Jul 18, 2010, 1:00:23 PM7/18/10
to publice...@googlegroups.com
Manes yo busco algo parecido, resulta que quiero que se pinten todas las filas pares de un color e impares de otro color, algo asi
 
Fila 1
Fila 2
Fila 3
Fila 4
 
Pero resulta que cuando borro un registro se me distorciona todo, como debo hacerlo?
 
Saludos

Hugo Carlos Aguilar Zapata

unread,
Jul 18, 2010, 1:31:49 PM7/18/10
to publice...@googlegroups.com
a ver si esto les funciona:
Yo lo utilizo para marcar una celda donde si la cantidad en un campo de una tabla es igual a la programada la celda es verde, si se excede la pinta de rojo, en el caso de que este no tenga valor, la celda queda de color blanco. Esta función esta aplicada a  la propiedad DinamicBackColor del elemento Column en un Grid

Es decir Grid1.Column1.DinamicBackColor = IIF(empty(curmaterialpc.cantidad),RGB(255,255,255),(IIF(curmaterialpc.cantidad>curmaterialpc.cantidadr,RGB(255,0,0),RGB(0,255,0))))

Saludos
Reply all
Reply to author
Forward
0 new messages