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); } |