DBGRID列标题颜色

3

我正在尝试更改Delphi XE6中DBGRID组件中特定列的标题单元格的颜色。以前当网格按该特定列排序时,我会绘制列标题。

DBGRID1.Columns[1].Title.Color := clBlue;

这是可能的吗?或者有更好的方法来突出显示排序列吗?


你有尝试过使用 DBGrid1.Columns[1].Title.Font.Color := clBlue; 吗? - undefined
您能澄清一下您所说的“更改标题单元格的颜色”是指字体颜色还是实际单元格(列标题)本身的颜色? - undefined
通常会绘制一个小图标来指示关键列。需要一些代码。如果我没记错的话,JvDBGrid默认就有这个功能。 - undefined
通过“标题单元格的颜色”我指的是实际列标题的背景颜色。在Delphi 2006中,DBGRID1.Columns[1].Title.Color := clBlue;可以正常工作,但在XE6中却不行。看起来是因为VCL样式的原因。DBGrid1.Columns[1].Title.Font.Color := clBlue;可以正常工作。但是,与不同的背景颜色相比,不同的字体颜色并不那么明显。我的用户抱怨说他们很难识别当前的列。我尝试了在JvDbGrid中使用图标,但是我的用户习惯于不同的背景颜色,并且他们抱怨说不同的字体颜色和图标还不够。 - user3401364
1
请编辑您的问题并在那里添加相关信息以澄清您的问题。将其埋藏在评论中(尤其是与其他针对多个人问题的信息混在一起的评论)几乎让阅读者无法看到,并且该信息与给出的任何答案都相关。谢谢。 - undefined
2个回答

2
尝试重写TCustomDBGrid.DrawCellBackground过程,以强制标题的背景颜色:
procedure TMyDBGrid.DrawCellBackground(const ARect: TRect; AColor: TColor; AState: TGridDrawState; ACol, ARow: integer);
begin
  if (FLastSortedColumnIdx = ACol) and (ACol >= 0) and (ARow = -1) then
    AColor := Columns[ACol].Title.Color;

  inherited;
end;

FLastSortedColumnIdx是一个字段,用于存储排序列的Column.Index。

应该在Delphi XE3中工作。


为什么他们应该这样做?请解释这个工作原理,因为这样可以最大程度地减少简单地复制粘贴而不了解代码工作原理的倾向。楼主应该能够理解你的选择所带来的后果,并确定是否适合他们的目的。 - undefined
抱歉,我犯了个错误。请原谅。 - undefined

1

好的,如果我理解你的问题正确的话,你所需要做的就是将DBGrid的DrawingStyle属性更改为gdsGradient,然后将gradentEndColorgradentStartColor更改为相同的颜色。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接