如何改变ListView中的子窗口ListColumns的颜色,它一直是灰色的
http://www.delphi2007.net/DelphiVCL/html/delphi_20061222091101203.html
我在C++ Builder中找到一个答案,说是要重画子窗口,但是我翻译成Delphi后调用没有成功。谁有用Delphi做的源代码,贴一下
给你一个关于自定义LISTVIEW风格的专题, 很不错的,有范例源码
http://www.delphidabbler.com/articles?article=16
那里给出的示例好像没有修改ListColumns颜色的呀,我想要将ListView的Columns的底色换一种颜色,比如蓝色之类的
FHeaderInstance: Pointer; //ListView Colums的实例
FDefHeaderProc: Pointer; //ListView Colums的主函数
FHeaderHandle: HWND; //句柄
////////////////////
初始化:
FHeaderInstance := Classes.MakeObjectInstance(HeaderWndProc); //
//////////////
//把Columns 的主函数子类化到 FDefHeaderProc
procedure TMyListView.WMParentNotify(var Message: TWMParentNotify);
begin
inherited;
with Message do
if (Event = WM_CREATE) and (FHeaderHandle = 0) then
begin
FHeaderHandle := ChildWnd;
FDefHeaderProc := Pointer(GetWindowLong(FHeaderHandle, GWL_WNDPROC));
SetWindowLong(FHeaderHandle, GWL_WNDPROC, LongInt(FHeaderInstance));
end;
end;
////////////
消息处理
procedure TFSSkinListView.HeaderWndProc(var Message: TMessage);
procedure DefaultProc;
begin
with Message do
Result := CallWindowProc(FDefHeaderProc, FHeaderHandle, Msg, WParam, LParam);
end;
begin
with Message do
begin
case Msg of
WM_ERASEBKGND: Result:=1;
WM_LBUTTONDOWN:;
WM_LBUTTONUP:;
WM_MOUSELEAVE:;
WM_MOUSEMOVE:;
WM_PAINT:;
begin
在此进行你要的绘画.
end;
HDM_LAYOUT:
end
else
DefaultProc;
end;
end;
procedure TFSSkinListView.HeaderWndProc(var Message: TMessage);
///////
更正
TMyListView.HeaderWndProc(var Message: TMessage);
只有重新创建新类才可以更换ListColumns的颜色吗,有没有其他的方法呀