默认情况下,我在C++生成器项目中使用的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
发布于 2019-06-28 18:57:48
我不知道您使用的是哪个版本的VCL,但回到以前,当我使用非常棒和非常有用的TStringGrid组件时,我做了完全相同的事情,与自定义着色单元格相关,就像您想做的那样。我认为这是与行为相关的变化,而不是定义为属性。您需要:
重载TStringGrid的虚函数,用于从TStringGrid绘制特定派生类中的单元格
或,
在包含要修改的TStringGrid的TForm实例上,更改该特定TStringGrid的行为。
因此,基本上您可以选择,是从TStringGrid派生新类并通过覆盖单元格绘制函数来更改行为,还是通过借助强大的ObjectInspector覆盖网格的行为来更改现有的特定TStringGrid实例(如果它仍然像那样调用的话)。
当然,最好是创建新的类并从TStringGrid派生它,然后直接在表单(父容器)上使用它,您可以在以后的任何时候重用它,但它包含一些额外的工作。也许,作为起点,使用对象检查器更改已经放在ParetContainer(可能是TForm)上的特定TStringGrid实例的行为会更好。如果这些指导对你来说还不够,我可以在这里放一些对你更有帮助的代码样本。
发布于 2019-07-28 00:25:20
您应该使用event 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 );
}
}
https://stackoverflow.com/questions/56803730
复制相似问题