首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++生成器TStringGrid行颜色

C++生成器TStringGrid行颜色
EN

Stack Overflow用户
提问于 2019-06-28 16:46:59
回答 2查看 941关注 0票数 0

默认情况下,我在C++生成器项目中使用的TStringGrid组件似乎可以替换行颜色。偶数行的背景为灰色,而奇数行的背景为白色。如何禁用此交替颜色,以便所有行都具有相同的背景色?

它看起来是这样的:

下面是DFM中的相应条目:

代码语言:javascript
运行
复制
  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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-28 18:57:48

我不知道您使用的是哪个版本的VCL,但回到以前,当我使用非常棒和非常有用的TStringGrid组件时,我做了完全相同的事情,与自定义着色单元格相关,就像您想做的那样。我认为这是与行为相关的变化,而不是定义为属性。您需要:

重载TStringGrid的虚函数,用于从TStringGrid绘制特定派生类中的单元格

或,

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

因此,基本上您可以选择,是从TStringGrid派生新类并通过覆盖单元格绘制函数来更改行为,还是通过借助强大的ObjectInspector覆盖网格的行为来更改现有的特定TStringGrid实例(如果它仍然像那样调用的话)。

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

票数 1
EN

Stack Overflow用户

发布于 2019-07-28 00:25:20

您应该使用event OnDrawCell。以下是工作示例:

代码语言:javascript
运行
复制
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 );
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56803730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档