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

发布于 2024-12-06 09:28:35 字数 267 浏览 1 评论 0原文

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

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

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

I'm just trying to use delphi XE, before that I've been a big fan of Delphi7.
I see the new dbgrid allows to use themed and gradient styles.

I'm using gradient and set rowselect, it has a property for gradient-start and -end for the column header.
But where is the property to set the selected color ?
It's strange because the color doesn't match, selected color is always a blue gradient.

I can do it with customdraw, I just want to know if there is anyway to change it without custom drawing.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

初吻给了烟 2024-12-13 09:28:35

所选颜色来自操作系统。
在那里它被编码为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;

The selected color comes from the OS.
There it's coded as clHighlight.

You cannot change it as such, but you can subclass the dbgrid and override the DrawCell method.
Or even easier add a onDrawCell eventhandler.

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;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文