TDrawGrid i TStringGrid
26.07.1999
  • Zmiana koloru poszczególnych komórek.

      Ustawiając właściwość DefaultDrawing na false i implementując handler OnDrawCell możemy praktycznie dowolnie zmieniać wygląd kontrolek DrawGrid i StringGrid. Poniżej przykład zmiany kolorów w StringGrid.

//--------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
        StringGrid1->DefaultDrawing = false;
        StringGrid1->Cells[2][2] = "Jestem Żółty";
}
//---------------------------------------------------

void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender,
      int ACol, int ARow, TRect &Rect, TGridDrawState State)
{
 //Jeżeli to nagłówek
 if (State.Contains(gdFixed))
 {
   StringGrid1->Canvas->Brush->Color = clGreen;
   StringGrid1->Canvas->Font->Color = clWindowText;
   StringGrid1->Canvas->FillRect(Rect);
   Frame3D(StringGrid1->Canvas, Rect, clBtnHighlight,
                                     clBtnShadow, 1);
  }

  //dla zaznaczonej komórki
  else if (State.Contains(gdSelected))
  {
    StringGrid1->Canvas->Brush->Color = clRed;
    StringGrid1->Canvas->Font->Color = clHighlightText;
    StringGrid1->Canvas->FillRect(Rect);
  }

  //jedynie dla komórki (2, 2)
  else if (ACol == 2 && ARow == 2)
  {
    StringGrid1->Canvas->Brush->Color = clBlue;
    StringGrid1->Canvas->Font->Color = clYellow;
    StringGrid1->Canvas->FillRect(Rect);
  }

 //dla zwykłej komórki
 else
 {
  StringGrid1->Canvas->Brush->Color = StringGrid1->Color;
  StringGrid1->Canvas->Font->Color = StringGrid1->Font->Color;
  StringGrid1->Canvas->FillRect(Rect);
 }

 AnsiString text = StringGrid1->Cells[ACol][ARow];
 StringGrid1->Canvas->TextRect(Rect, Rect.Left, Rect.Top, text);

}