Mensaje    Asunto: Pintar varias filas de un DBGrid del mismo color y otras no Responder citando

Hola a todos, y en especial a Leo (porque esto de pintar DBGrids parece que se la bastante bien), a ver si podeis resolverme esta duda con los colores de un DBGrid. He utilizado el código de Leo para pintar CheckBox en un DBGrid, y también he estado probando con el código de alternar el color en las filas de un DBGrid, pero no consigo ajustarlo a lo que yo necesito. A ver, tengo una campo Boolean que me indica si varias de las filas que aparecen en el DBGrid pertenecen a un mismo "bloque" de información. Si este campo vale True, hay otro campo que almacena el nombre de cada bloque, la idea es pintar las filas del DBGrid por bloques, pero no sé como hacerlo. Cada vez que leo una fila del DBGrid, si bloque = True almaceno el nombre y pinto la fila de un color, si en la siguiente fila, bloque = True, compruebo si el campo Nombre es el mismo que el anterior, si lo es lo pinto del mismo color y sino de un color diferente (alternativo, porque no me hacen falta más de 2 colores).

Lo que estaba haciendo es:
Código:

void __fastcall TForm::DBGrid2DrawColumnCell(TObject *Sender,
      const TRect &Rect, int DataCol, TColumn *Column,
      TGridDrawState State)
{
    AnsiString Nom;
    AnsiString NomAnt;

    TCanvas * c = DBGrid2->Canvas;
    TColor Col;

    Nom = DBGrid2->Fields[5]->AsString;
   /*** COMO ALMACENO EL NOMBRE QUE HAY EN LA FILA ANTERIOR ??***/

    if( DataCol == 4 )//El nro. de Columna que debe mostrar el CheckBox
    {
        Col = clRed;
        DibujarCheckBox( c,Rect, Column->Field->AsBoolean, Nom, Col);
    }
    else
        DBGrid2->DefaultDrawColumnCell(Rect,DataCol,Column,State);
}


Y por otra parte:
Código:

void __fastcall DibujarCheckBox(TCanvas * c,
      const TRect &Rect, bool Valor, AnsiString Nombre,
      TColor Color)
{
    TRect r = Rect;
    AnsiString NombreAnt;
    UINT Check = 0;
    if( Valor == True)
    {
        Check = DFCS_CHECKED;

        if (Nombre == NombreAnt)
        {
          // entonces tengo que pintar toda la fila del mismo color que la
          // anterior
            c->Brush->Color = Color;
         /*** COMO HAGO ESTO ***/
        }
        else
        {
          // sino tengo que pintar toda la fila de un color alternativo
          // y guardar este color para pintar la siguiente fila que pertenezca
          // al mismo bloque
            c->Brush->Color = ¿¿¿COLOR ALTERNATIVO???
         /*** COMO HAGO ESTO ***/
        }

    }
    c->FillRect(Rect);
    r.Top += 2;
    r.Bottom -= 1;
    r.Left += 1;
    r.Right -= 1;
    DrawFrameControl(c->Handle,(RECT*)&r,
        DFC_BUTTON, DFCS_BUTTONCHECK | Check );
}


Evidentemente ya sé que este código no es correcto, pero no sé como hacerlo, o si debería hacer una función nueva, en la cual una vez dibujado el DBGrid lo recorriera registro a registro y fuera coloreando, pero claro eso no quedaría bonito de cara al usuario porque se vería primero el DBGrid en blanco y después como se va pintando.

Podríais ayudarme??