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

col*_*aja 10 delphi drawing gradient dbgrid

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

我正在使用渐变并设置rowselect,它具有渐变开始的属性和列标题的-end属性.
但物业在哪里设置selected color
这很奇怪,因为颜色不匹配,selected color总是蓝色渐变.

我可以做到这一点customdraw,我只是想知道是否有任何方式改变它没有自定义绘图.

Joh*_*ica 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;
Run Code Online (Sandbox Code Playgroud)