C++ Builder TStringGrid 行颜色

C++ Builder TStringGrid row colors

我在 C++ Builder 项目中使用的 TStringGrid 组件默认情况下似乎会交替显示行颜色。偶数行具有灰色背景,而奇数行具有白色背景。我怎样才能禁用这种替代着色,以便所有行都具有相同的背景颜色?

这是它的样子:

这里是 DFM 中的相应条目:

  object StringGrid1: TStringGrid [0]
    Left = 0
    Top = 0
    Width = 744
    Height = 300
    Align = alClient
    FixedCols = 0
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clWindowText
    Font.Height = -11
    Font.Name = 'Tahoma'
    Font.Style = []
    Options = [goFixedHorzLine, goVertLine, goHorzLine, goColSizing, goRowSelect]
    ParentFont = False
    TabOrder = 0
    OnSelectCell = StringGrid1SelectCell
    ColWidths = (
      64
      64
      64
      64
      64)
  end

我不知道您使用的是哪个版本的 VCL,但回到过去,当我一直在使用很棒且非常有用的 TStringGrid 组件时,我做了与您完全相同的自定义着色单元格相关的事情想要做。我认为它是与行为相关的变化,而不是定义为 属性。 您需要:

重载 TStringGrid 的虚函数,用于在您的特定派生 class 中从 TStringGrid

中绘制单元格

或者,

在包含要修改的 TStringGrid 的 TForm 实例上,更改该特定 TStringGrid 的行为。

因此,基本上您可以选择,从 TStringGrid 派生新的 class 并通过重写单元格绘制函数来更改行为,或者通过仅重写该网格的行为来更改现有的特定 TStringGrid 实例伟大的 ObjectInspector 的帮助,如果它仍然被这样调用的话。

当然更好,创建新的 class 并从 TStringGrid 派生它,并直接在 Form(父容器)上使用它,您以后可以随时重用它, 但它包含一些额外的工作。也许,作为起点,最好使用对象检查器更改您已经放在 ParetContainer(可能是 TForm)上的特定 TStringGrid 实例的行为。如果这些说明对您来说还不够,我可以在这里放一些对您更有帮助的代码示例。

您应该使用事件 OnDrawCell。这是工作示例:

void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
      int ARow, TRect &Rect, TGridDrawState State)
{
    if( ( ARow % 2 ) == 0 )
    {
        if( ARow == 0 )
            StringGrid1->Canvas->Brush->Color = clBlue;
        else
            StringGrid1->Canvas->Brush->Color = clGray;
        StringGrid1->Canvas->FillRect( Rect );
    }
}