簡體   English   中英

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的虛擬函數,用於從TStringGrid繪制特定派生類中的單元格

要么,

在要修改的包含TStringGrid的TForm實例上,更改該特定TStringGrid的行為。

因此,基本上,您可以選擇從TStringGrid派生新類,並通過重寫單元格繪制函數來更改行為,或者通過在出色的ObjectInspector的幫助下覆蓋該網格的行為來更改TStringGrid的現有特定實例(如果仍然存在)這樣叫。

當然,最好創建一個新類並從TStringGrid派生它,並直接在Form(Parent容器)上使用它,以后您可以隨時重用它,但是它包含一些其他工作。 也許作為起點,最好使用對象檢查器來更改已經放置在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 );
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM