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