Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Cambiar el color de las celdas seleccionadas de un DrawGrid (https://www.clubdelphi.com/foros/showthread.php?t=75738)

chinchan 15-09-2011 18:08:25

Cambiar el color de las celdas seleccionadas de un DrawGrid
 
Hola a Todos. ¿Cómo puedo cambiar el color de fondo (background) de las celdas seleccionadas de un DrawGrid?. El azul que sale por defecto coincide prácticamente con el color de fuente que utilizo. Muchas Gracias.

ecfisa 15-09-2011 18:20:39

Hola chinchan.

Un ejemplo con un StringGrid:
Código:

void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
      int ARow, TRect &Rect, TGridDrawState State)
{
  if (State.Contains(gdFocused)) {
    StringGrid1->Canvas->Brush->Color = clRed;
    StringGrid1->Canvas->FillRect(Rect);
    StringGrid1->Canvas->Font->Color = clYellow;
    DrawText(StringGrid1->Canvas->Handle,StringGrid1->Cells[ACol][ARow].c_str(),
            StringGrid1->Cells[ACol][ARow].Length(),&Rect,
            DT_NOCLIP | DT_SINGLELINE);
  }
}

Te aclaro que al abandonar el foco del TStringGrid, retornará a su color original.

Saludos.

escafandra 15-09-2011 23:24:51

Cita:

Empezado por chinchan (Mensaje 412251)
...¿Cómo puedo cambiar el color de fondo (background) de las celdas seleccionadas de un DrawGrid?...

Cita:

Empezado por ecfisa (Mensaje 412255)
...Te aclaro que al abandonar el foco del TStringGrid, retornará a su color original...

Bueno, creo que la pregunta no iba por la celda que tenga el foco sino por las celdas seleccionadas.

El ejemplo de ecfisa es muy bueno pero si cambiamos gdFocused por gdSelected conseguimos lo que quiere chinchan :).
Por otro lado, yo prefiero usar Sender para referirme al objeto Grid correspondiente, así la misma función puede responder a eventos de distintos Grids... Son manías mías :p

Propongo esta variante:
Código:

void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
      int ARow, TRect &Rect, TGridDrawState State)
{
  TStringGrid * Grid = dynamic_cast<TStringGrid*>(Sender);
  if (State.Contains(gdSelected) && Grid) {
    Grid->Canvas->Brush->Color = clRed;
    Grid->Canvas->FillRect(Rect);
    Grid->Canvas->Font->Color = clYellow;
    DrawText(Grid->Canvas->Handle, Grid->Cells[ACol][ARow].c_str(),
            Grid->Cells[ACol][ARow].Length(), &Rect,
            DT_NOCLIP | DT_SINGLELINE);
  }
}

Saludos.

chinchan 18-09-2011 01:24:20

Sabía que me ibais a solucinar el problema. Genial. Muchas Gracias (otra vez).


La franja horaria es GMT +2. Ahora son las 19:20:08.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi