windows – Delphi:ListView(vsReport)单列标题标题与自定义字
发布时间:2020-12-13 22:44:37 所属栏目:Windows 来源:网络整理
导读:在带有vsReport ViewStyle的ListView中,如何自定义任何单列标题标题的字体颜色?例如(第二列标题标题具有红色字体颜色): 我将处理 NM_CUSTOMDRAW 标头通知代码,并在CDDS_ITEMPREPAINT呈现阶段使用CDRF_NEWFONT返回代码响应此通知消息.以下代码显示如何扩展
在带有vsReport ViewStyle的ListView中,如何自定义任何单列标题标题的字体颜色?例如(第二列标题标题具有红色字体颜色):
我将处理
NM_CUSTOMDRAW 标头通知代码,并在CDDS_ITEMPREPAINT呈现阶段使用CDRF_NEWFONT返回代码响应此通知消息.以下代码显示如何扩展列表视图控件以使用事件指定标题项字体颜色:
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. 整个项目你可以download from here.这是上面例子的结果: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 从导入的DLL调用Metatrader MQL4 / MQL5函数
- 如何在Windows中杀死子进程python
- Windows – SYSTEM(PID 4)正在使用端口80,那是什么?
- Windows7下PHP开发环境安装配置图文方法
- win10 linux子系统的一些想法
- windows-server-2003 – 在Windows中测试直接连接的数组
- Windows – PXE启动无法通过DHCP获取IP地址,但DHCP在操作系
- windows – gflags对话框无法打开
- win2008 R2 WEB 服务器安全设置指南之组策略与用户设置
- batch-file – 在Windows批处理文件中回显精确字符串?