请问如何改变TListView的列头(vsReport时)的背景颜色?

weizhi 2002-08-19 01:51:22
我的ListView.ViewStyle = vsReport, 此时列头的背景颜色始终为clBtnFace,
我想改变为其它颜色,该怎么处理?

我得到了header为窗口句柄,然后Subclassed后,可以捕获到WM_ERASEBKGND,但还是不能成功的改变背景色。也许是我没有做好。

请各位高手不吝指教!
...全文
70 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wzwcw 2002-08-20
  • 打赏
  • 举报
回复
To weizhi(行者):
这是以前编的控件,本来就没有完工,不过可以改标题颜色,不太好做,
也可以用另外麻烦点方法解决,你告诉我信箱,我给你发个控件,是我参考别人改的。
copy_paste 2002-08-20
  • 打赏
  • 举报
回复
ListView.OnCustomDrawItem事件
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if (Item.Index mod 2) = 0 then
Sender.Canvas.Brush.Color := 背景色; //淡一点
end;
weizhi 2002-08-20
  • 打赏
  • 举报
回复
感谢wzwcw(Delphi)的帮助,不过,问题还是没有解决。不知道你能不能花点时间帮忙研究和整理一下。

如果分不够的话,可以再加的。

也请其它高手们关注。
wzwcw 2002-08-20
  • 打赏
  • 举报
回复
已发,请查收
weizhi 2002-08-20
  • 打赏
  • 举报
回复
to wzwcw(Apple):
呵呵,好吧,非常感谢你。
我的联系方法:
Mail:weizhi@btamail.net.cn
QQ:46938712

black_fox 2002-08-19
  • 打赏
  • 举报
回复
Sign
wzwcw 2002-08-19
  • 打赏
  • 举报
回复
能够改变颜色,但是还有些小问题(当column 为空时,双击header,颜色又变了回去,这个可以解决,但还是有毛病):),还有另外方法 :)
wzwcw 2002-08-19
  • 打赏
  • 举报
回复
procedure TmyListView.WMNotify(var Message: TWMNotify);
var
FHeaderHandle: THandle;
begin
inherited;

FHeaderHandle := SendMessage(Handle, LVM_GETHEADER, 0, 0);

if ValidHeaderHandle and (Message.NMHdr^.hwndFrom = hHead) then
begin
with Message.NMHdr^ do
begin
if (hwndfrom = FHeaderHandle) then
case code of

HDN_BEGINTRACK,HDN_BEGINTRACKW:
FHeaderTracking := True;

HDN_ENDTRACK,HDN_ENDTRACKW:
begin
FHeaderTracking := False;
SetHeaderOwnerDraw(FHeaderOwnerDraw);
end;

HDN_ITEMCHANGED:
SetHeaderOwnerDraw(FHeaderOwnerDraw);

HDN_DIVIDERDBLCLICK:
begin
if not FHeaderTracking then
SetHeaderOwnerDraw(FHeaderOwnerDraw);
with PHDNotify(Pointer(Message.NMHdr))^ do
begin
Column[Item].Width :=ListView_GetColumnWidth(Handle, Item)+1;
if IsCustomDrawn(dtControl, cdPrePaint) then Invalidate;
end;
end;

NM_CUSTOMDRAW:
begin
with PNMCustomDraw(Message.NMHdr)^ do
begin
case dwDrawStage of
CDDS_PREPAINT: Message.Result := CDRF_NOTIFYITEMDRAW;
CDDS_ITEMPREPAINT:
begin
SetTextColor(hdc, clwhite);
SetBkColor(hdc, clskyblue);
Message.Result := CDRF_NEWFONT;
end;

end;
end;
end;
end;
end;
end;
end;

以前写的,有点乱,你可以参考一下

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧