Delphi TDBGrid如何在样式为gdsGradient时更改所选颜色

Posted

技术标签:

【中文标题】Delphi TDBGrid如何在样式为gdsGradient时更改所选颜色【英文标题】:Delphi TDBGrid How to change selected color when style is gdsGradient 【发布时间】:2011-09-24 01:51:33 【问题描述】:

我只是在尝试使用 delphi XE,在此之前我一直是 Delphi7 的忠实粉丝。 我看到新的 dbgrid 允许使用主题和渐变样式。

我正在使用渐变并设置行选择,它具有用于列标题的渐变开始和结束属性。 但是设置selected color 的属性在哪里? 很奇怪,因为颜色不匹配,selected color 总是蓝色渐变。

我可以用customdraw 做到这一点,我只是想知道是否有在没有自定义绘图的情况下进行更改。

【问题讨论】:

sory,my bad english ;) 永远不要为此道歉。只有 6000 万人以英语为母语,我们其他人只是在挣扎。 在使用 US_EN 拼写时这么说感觉很奇怪 可能来自操作系统,比如clHighlight? 【参考方案1】:

所选颜色来自操作系统。 在那里它被编码为clHighlight

您不能这样更改它,但您可以继承 dbgrid 并覆盖 DrawCell 方法。 或者更容易添加onDrawCell 事件处理程序。

procedure TForm1.DBGrid1DrawCell(Sender: TObject, const Rect: TRect; Field: TField;  State: TGridDrawState); 
var
  index: Integer;
begin
  if not(gdSelected in State) then DefaultDrawCell(Rect, Field, State)
  else begin 
    index := ARow * DBGrid1.ColCount + ACol;
    DBGrid1.Canvas.Brush.Color := clYellow; <<-- some color  
    DBGrid1.Canvas.FillRect(Rect);
    if (gdFocused in State) then begin
      DBGrid1.Canvas.DrawFocusRect(Rect);
    end;
    ImageList1.Draw(DBGrid1.Canvas,Rect.Left,Rect.Top,index, True);
end;

【讨论】:

以上是关于Delphi TDBGrid如何在样式为gdsGradient时更改所选颜色的主要内容,如果未能解决你的问题,请参考以下文章

delphi中的TDBGrid的问题

Delphi XE2 中 TTable 和 TDBGrid 的意外行为

How to create a OnCellDblClick for Delphi's TDBGrid

delphi TDbGrid 右键 PopupMenu 菜单只在有数据的地方弹出

利用书签功能对TDBGrid控件中多个记录的处理

当 TDBGrid.DefaultDrawing 为 false 时,如何正确绘制全行选定 TDBGrid 的所有者?