delphi - 如果列名包含特定文本,如何更改 cxGrid 中所有列的颜色
问题描述
我正在使用 SQL 在 cxGrid2DBTableView 中水平创建日历表,具体取决于用户选择的日期和日期。因为列名总是不同的,如下图所示:
我想更改非工作日值的颜色,这意味着我必须标记所有包含 %Sub% 或 %Ned% 的列并更改它们的颜色。
这是我知道列名时使用的代码示例:
procedure TForm1.cxGrid1DBTableView1VremeCustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
ACanvas.Font.Color := clBlack;
ACanvas.Brush.Color := clMoneyGreen;
end;
解决方案
您可以将 GridView 的OnCustomDrawCell
事件处理程序与AViewInfo.Item.Name
.
procedure TForm1.cxGrid1DBTableView1CustomDrawCell(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
if(Pos('Sub', AViewInfo.Item.Name) <> 0) or (Pos('Ned', AViewInfo.Item.Name) <> 0) then
begin
ACanvas.Font.Color := clBlack;
ACanvas.Brush.Color := clMoneyGreen;
end;
end;
如果您更喜欢使用字幕,可以使用AViewInfo.Item.Caption
而不是AViewInfo.Item.Name
. 无论如何,我建议您永远不要使用字幕,因为它们可能会在多语言应用程序中发生变化。
如果要绘制列的标题,可以使用 GridView 的OnCustomDrawColumnHeader
事件处理程序:
procedure TForm1.cxGrid1DBTableView1CustomDrawColumnHeader(
Sender: TcxGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridColumnHeaderViewInfo; var ADone: Boolean);
begin
if(Pos('Sub', AViewInfo.Column.Name) <> 0) or (Pos('Ned', AViewInfo.Column.Name) <> 0) then
begin
ACanvas.Font.Color := clBlack;
ACanvas.Brush.Color := clMoneyGreen;
end;
end;
推荐阅读
- javascript - 如何在angular2中一次打开一个弹出窗口并在外部单击时关闭弹出窗口
- css - 垂直位置的反应响应轮播控制点
- javascript - 如何在php中获取已附加serializeArray的数组值
- php - 如何从命令终端获取网络流量并在 PHP 中显示
- react-native - Redux Persist,rehydrate 不能在 android 上工作
- entity-framework - 批量插入记录时,临时表在操作结束后不会删除,并且在第三个临时表处插入失败
- c++ - 如何在 cpp 中使用协议缓冲区存储大缓冲区/数组(char/int)...?
- reactjs - Express Js 如何作为项目的 devDependencies 工作
- javascript - 如何在单击按钮时删除多行
- openssl - 使用 api 的带有密码短语参数的 openssl 证书请求