Delphi:ListView(vsReport)单列标题标题具有自定义字体颜色?

2023-11-21

In a ListView with vsReport ViewStyle, how can I customize the font color of just any single column header caption? For example (the second column header caption has a red font color): enter image description here


我会处理NM_CUSTOMDRAW标头通知代码并使用以下内容响应此通知消息CDRF_NEWFONT返回代码位于CDDS_ITEMPREPAINT渲染阶段。以下代码显示如何扩展列表视图控件以具有指定标题项字体颜色的事件:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, CommCtrl, StdCtrls;

type
  TGetHeaderItemFontColorEvent = procedure(Sender: TCustomListView;
    ItemIndex: Integer; var FontColor: TColor) of object;
  TListView = class(ComCtrls.TListView)
  private
    FHeaderHandle: HWND;
    FOnGetHeaderItemFontColor: TGetHeaderItemFontColorEvent;
    procedure WMNotify(var AMessage: TWMNotify); message WM_NOTIFY;
  protected
    procedure CreateWnd; override;
  published
    property OnGetHeaderItemFontColor: TGetHeaderItemFontColorEvent read
      FOnGetHeaderItemFontColor write FOnGetHeaderItemFontColor;
  end;

type
  TForm1 = class(TForm)
    ListView1: TListView;
    procedure FormCreate(Sender: TObject);
  private
    procedure GetHeaderItemFontColor(Sender: TCustomListView;
      ItemIndex: Integer; var FontColor: TColor);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TListView }

procedure TListView.CreateWnd;
begin
  inherited;
  FHeaderHandle := ListView_GetHeader(Handle);
end;

procedure TListView.WMNotify(var AMessage: TWMNotify);
var
  FontColor: TColor;
  NMCustomDraw: TNMCustomDraw;
begin
  if (AMessage.NMHdr.hwndFrom = FHeaderHandle) and
    (AMessage.NMHdr.code = NM_CUSTOMDRAW) then
  begin
    NMCustomDraw := PNMCustomDraw(TMessage(AMessage).LParam)^;
    case NMCustomDraw.dwDrawStage of
      CDDS_PREPAINT:
        AMessage.Result := CDRF_NOTIFYITEMDRAW;
      CDDS_ITEMPREPAINT:
      begin
        FontColor := Font.Color;
        if Assigned(FOnGetHeaderItemFontColor) then
          FOnGetHeaderItemFontColor(Self, NMCustomDraw.dwItemSpec, FontColor);
        SetTextColor(NMCustomDraw.hdc, ColorToRGB(FontColor));
        AMessage.Result := CDRF_NEWFONT;
      end;
    else
      AMessage.Result := CDRF_DODEFAULT;
    end;
  end
  else
    inherited;
end;

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  ListView1.OnGetHeaderItemFontColor := GetHeaderItemFontColor;
end;

procedure TForm1.GetHeaderItemFontColor(Sender: TCustomListView;
  ItemIndex: Integer; var FontColor: TColor);
begin
  case ItemIndex of
    0: FontColor := clRed;
    1: FontColor := clGreen;
    2: FontColor := clBlue;
  end;
end;

end.

整个项目你可以从这里下载。这是上面示例的结果:

enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Delphi:ListView(vsReport)单列标题标题具有自定义字体颜色? 的相关文章

随机推荐

  • AWS Elastic Beanstalk 和 PHP 会话

    我目前正在 AWS EC2 实例上开发一个 php 应用程序 但我决定将其移至 Elastic Beanstalk 以利用自动扩展功能 虽然大多数应用程序完美地迁移到新的 Elastic Beanstalk EC2 实例 但我遇到了有关 p
  • Java Graphics.fillPolygon:如何渲染右边缘和下边缘?

    绘制多边形时 Java2D 会忽略右边缘和底边缘 我明白为什么要这样做 然而 我想画一些包含这些边缘的东西 我想到的一件事是遵循fillPolygon with drawPolygon具有相同的坐标 但这似乎留下了间隙 参见底部的小三角形图
  • 适合简单聊天应用程序的设计模式

    我正在设计一个简单的聊天应用程序 只是为了好玩 我一直想知道该聊天应用程序的简单设计 为了给您概述 以下是规则 匿名用户只需使用昵称即可进入聊天室 用户 ID 大概是由系统在后台分配的 他们可以加入 订阅 聊天对话 他会看到其他用户的聊天文
  • 查询mongoengine中的列表;包含与在

    我在带有 ids ReferenceField 的模型中有一个 ListField 如果某个 id 位于该列表中 我需要进行查询 据我所知 我有两个选择 Model objects filter refs contains 59633cad
  • Android 应用内计费 - BillingService 存在 onServiceConnected 和 onServiceDisconnected 编译错误

    我正在使用 Dungeons 应用程序示例 并且使用该示例中提供的 BillingService 类 我正在使用 Java 6 并且 override 对我有用 但是我在 BillingService java 中的这两个方法上收到编译错误
  • 过滤自定义适配器 IndexOutOfBoundsException

    我是安卓新手 我的自定义适配器在过滤时导致异常 这是我的代码 私有类 DeptAdapter 扩展 ArrayAdapter 实现 Filterable private ArrayList
  • jQuery 反转子元素的顺序

    使用 jQuery 反转子元素顺序的最佳方法是什么 例如 如果我从以下内容开始 ul li A li li B li li C li ul 我想以此结束 ul li C li li B li li A li ul var list ul v
  • 检索 jooq 中 selectCount 的值

    我有一些代码看起来像这样 Record record jooq selectCount from USERS fetchOne 目前我正在执行以下操作来获取计数 Integer count Integer record getValue 0
  • grep: -P 在 Jenkins 中仅支持 unibyte 和 UTF-8 语言环境

    我有一个 shell 脚本 可以在本地的 git bash 中正确执行 但是 当通过 Jenkins 使用与 shell 环境相同的 git bash 执行相同操作时 它会失败并显示 grep P 仅支持 unibyte 和 UTF 8 语
  • 复制工作表而不复制代码

    我可以通过调用它来复制工作表 Copy method Sheets Example Copy After Worksheets Sheet3 但是 这也会复制与该工作表关联的任何宏或事件处理程序 如何在不复制任何 Visual Basic
  • 对于每个控制变量必须是变量或对象

    这里对 VBA 真的很陌生 我环顾四周并尝试拼凑一些代码来满足我的需求 我认为已经差不多了 但我遇到的错误可能很容易克服 但我不知道如何克服 该代码查看当前工作表 STOCK 并从单元格 A2 中获取 目标 文本值 然后 它在另一个工作表
  • 如何创建每页显示 1 条记录的报告 (rdlc)

    让它工作时遇到一些麻烦 我基本上希望报告看起来类似于 我记得过去这样做的方法是在报表向导中创建 页面组 不过 我相信这是在 VS05 中 现在 VS10 中的报表向导有很大不同 它现在有列组和行组 但没有页面组 而且我也无法看到如何在没有向
  • Java内存不足异常

    我正在 Tomcat 中运行 Java Web 应用程序 该应用程序使用 Quartz 框架定期安排 cron 作业 这个 cron 作业涉及解析一个 4 MB 的 xml 文件 我正在使用 JDOM API 执行此操作 该 xml 文件包
  • 将 R 中直方图中的值集中在条形上

    希望将 x 轴的值绘制在 R 中条形的中心 在寻找实现这一点的方法时遇到问题 代码如下 hist sample avg breaks 7 ylim c 0 2000 main Histogram of Sample Average for
  • Cloud Run 请求限制

    目前 Cloud Run 的请求限制为32 Mb每个请求 这使得无法上传视频等文件 未对 GCP 存储进行任何更改 与此同时所有配额页面并未将此限制列为您可以向支持请求增加的限制 所以问题是 有谁知道如何增加此限制或如何使其成为可能 上传视
  • 具有固定标题和固定列的 HTML 表格?

    是否有 CSS JavaScript 技术来显示长 HTML 表格 使列标题在屏幕上保持固定 第一列保持固定并随数据滚动 我希望能够滚动浏览表格的内容 但始终能够看到顶部的列标题和左侧的第一列 如果有一个 jQuery 插件那就太好了 如果
  • 在pytorch中重置神经网络的参数

    我有一个具有以下结构的神经网络 class myNetwork nn Module def init self super myNetwork self init self bigru nn GRU input size 2 hidden
  • 在 Windows 资源管理器上下文菜单中添加分隔符(而不是在子菜单中)

    我发现 CommandFlags dword 00000040 将在条目下方添加分隔符 但仅添加到子菜单 在 subcommands 字符串下 例子here 有没有办法在主上下文菜单中添加分隔符 我正在使用的示例 HKEY CLASSES
  • git 过滤分支和 git 子树之间的区别?

    正在寻找 throw SO 来寻找答案 遇到了这个旧线程 它似乎没有给出任何答案 重新触发此线程希望有人知道 有人能告诉我 git subtree 和 git filter branch 之间的区别吗 我将在原始问题中使用相同的示例 git
  • Delphi:ListView(vsReport)单列标题标题具有自定义字体颜色?

    In a ListView with vsReport ViewStyle how can I customize the font color of just any single column header caption For ex