Delphi TDBGrid 当样式为gdsGradient时如何更改选定的颜色

标签 delphi drawing gradient dbgrid

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

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

我可以用customdraw来做到这一点,我只是想知道是否有办法在不自定义绘图的情况下更改它。

最佳答案

所选颜色来自操作系统。
在那里它被编码为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时如何更改选定的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7536457/

相关文章:

delphi - 如何从已处理/捕获的异常中获取堆栈跟踪并将其转储到跟踪日志

swift - Playground 绘图和 Project for Swift 之间的区别

c# - 用C#绘制带有圆角,边框和渐变的图像

c++ - 梯度方向计算

python - 使用 plt 在热图上绘制梯度箭头

windows - 继承 Windows ThreadHandle

mysql - FireDAC 在查询期间丢失与 MySQL 服务器的连接

html - http请求未收到预期响应(或未被解析)[webkit表单边界]

Python TachoMeter,如何在每个 create_line 之后显示

c# - 如何在 Xamarin.iOS 中绘制圆角矩形?