15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Как изменить цвет определённой ячейки в TStringGrid.

Компилятор: C++ Builder

Установите свойство DefaultDrawing в false, а затем в обработчик события OnDrawCell добавьте следующий код:

void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender,
     int Col, int Row, TRect &Rect, TGridDrawState State)
 {
     
// Если это заголовок
      if (State.Contains(gdFixed))
      {
          StringGrid1->Canvas->Brush->Color = clBtnFace;
          StringGrid1->Canvas->Font->Color = clWindowText;
          StringGrid1->Canvas->FillRect(Rect);
          Frame3D(StringGrid1->Canvas, Rect,
                  clBtnHighlight, clBtnShadow, 1);
      }

      // если ячейка выделена
      else if (State.Contains(gdSelected))
      {
          StringGrid1->Canvas->Brush->Color = clHighlight;
          StringGrid1->Canvas->Font->Color = clHighlightText;
          StringGrid1->Canvas->FillRect(Rect);
      }

      // закрашиваем ячейку (2, 2)
      else if (Col == 2 && Row == 2)
      {
          StringGrid1->Canvas->Brush->Color = clBlue;
          StringGrid1->Canvas->Font->Color = clRed;
          StringGrid1->Canvas->FillRect(Rect);
      }

      // Для всех остальных ячеек
      else
      {
          StringGrid1->Canvas->Brush->Color = StringGrid1->Color;
          StringGrid1->Canvas->Font->Color = StringGrid1->Font->Color;
          StringGrid1->Canvas->FillRect(Rect);
      }

      AnsiString text = StringGrid1->Cells[Col][Row];
      StringGrid1->Canvas->TextRect(Rect, Rect.Left, Rect.Top, text);
 }