急!急!急!ListView的标题(Column)怎么改变颜色?

smallyan 2004-06-29 09:20:43
如题!哪样仁兄能帮帮小弟!
...全文
273 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackie168 2004-09-29
  • 打赏
  • 举报
回复
修改樓上得來的://效果好像還不如沒改過的,呵呵~~
uses CommCtrl;
procedure TForm1.Button1Click(Sender: TObject);
var
dc:hdc;
r1,r2:trect;
hhwnd:Thandle;
begin
hhwnd := SendMessage(listview1.Handle, LVM_GETHEADER, 0, 0);

dc:=getwindowdc(hhwnd);
getwindowrect(hhwnd,r1);
offsetrect(r1,-r1.Left,-r1.Top);
r2:=r1;
r2.Right:=listview1.Columns[0].Width;
fillrect(dc,r2,getstockobject(LTGRAY_BRUSH));
r2.Left:=r2.Right;
r2.Right:=r2.Left+listview1.Columns[1].Width;
fillrect(dc,r2,getstockobject(GRAY_BRUSH));
releasedc(hhwnd,dc);
end;
fj218 2004-09-29
  • 打赏
  • 举报
回复
引用CommCtrl单元,listview1的viewstyle设为vsReport。

procedure TForm1.Button1Click(Sender: TObject);
var
dc:hdc;
r1,r2:trect;
begin
hhwnd := SendMessage(listview1.Handle, LVM_GETHEADER, 0, 0);

dc:=getwindowdc(hhwnd);
getwindowrect(hhwnd,r1);
offsetrect(r1,-r1.Left,-r1.Top);
r2:=r1;
r2.Right:=listview1.Columns[0].Width;
fillrect(dc,rc2,getstockobject(white_brush));
r2.Left:=r2.Right;
r2.Right:=r2.Left+listview1.Columns[1].Width;
fillrect(dc,rc2,getstockobject(white_brush));
releasedc(hhwnd,dc);
end;
参考一下,自己再做修改
jackystar 2004-09-29
  • 打赏
  • 举报
回复
这个画出来都是黑色?
有人搞定没?
aushqh 2004-08-03
  • 打赏
  • 举报
回复
这个会一直闪动,关注中。。。。
juliens 2004-07-28
  • 打赏
  • 举报
回复
把GetClientRect(hwnd, Rect);这句改成Windows.GetClientRect(hwnd, Rect);就行了!


Result := CallWindowProc(nil, hwnd,uMsg, wParam, lParam);这句没有错!
bluesky23 2004-07-28
  • 打赏
  • 举报
回复
学习
fei19790920 2004-06-29
  • 打赏
  • 举报
回复
procedure SetListHeadColor(hListView:HWND; Color:TColor);
var
hHeader: HWND;
OldProc: FARPROC;

function NewHeadProc(hwnd:HWND; uMsg:UINT;
wParam:WPARAM; lParam:LPARAM): Longint; stdcall;
var
Rect:TRect;
Canvas: TCanvas;
Bmp: TBitmap;
begin
Result := CallWindowProc(OldProc, hwnd,
uMsg, wParam, lParam);
if uMsg = WM_PAINT then
begin
GetClientRect(hwnd, Rect);
Bmp := TBitmap.Create;
Bmp.Width := Rect.Right;
Bmp.Height := Rect.Bottom;
Canvas := TCanvas.Create;
Canvas.Handle := GetDC(hwnd);
Bmp.Canvas.CopyRect(Rect, Canvas, Rect);
Bmp.Transparent := true;
Bmp.TransparentColor := clBtnFace;
Canvas.Brush.Color := Color;
Canvas.Rectangle(Rect);
Canvas.Draw(0, 0, Bmp);
ReleaseDC(hwnd, Canvas.Handle);
Canvas.Free; Bmp.Free;
end;
end;

begin
hHeader := FindWindowEx(hListView, 0,
'SysHeader32', Nil);
OldProc := FARPROC(SetWindowLong(hHeader,
GWL_WNDPROC, LongInt(@NewHeadProc)));
InvalidateRect(hHeader, Nil, FALSE);
end;

smallyan 2004-06-29
  • 打赏
  • 举报
回复
为什么会报错

错在这行!
Result := CallWindowProc(nil, hwnd,uMsg, wParam, lParam);

5,928

社区成员

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

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