如何listview改变columnheader颜色

shuihan20e 2014-03-06 02:36:40
...全文
429 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
shuihan20e 2014-03-06
  • 打赏
  • 举报
回复
引用 13 楼 lght 的回复:
1 获取listview的句柄 ListView_GetHeader(); 2 用自己的窗口过程替换默认的窗口过程 setwindowlong 3 在窗口过程的里处理WM_PAINT消息。参考楼上 可以参考rz的listview怎么处理的
太高深了,不会
lght 2014-03-06
  • 打赏
  • 举报
回复
1 获取listview的句柄 ListView_GetHeader(); 2 用自己的窗口过程替换默认的窗口过程 setwindowlong 3 在窗口过程的里处理WM_PAINT消息。参考楼上 可以参考rz的listview怎么处理的
  • 打赏
  • 举报
回复
procedure TForm1.ADrawText(Canvas: TCanvas; AText: string; ARect: TRect);
var
  H, W, X, Y: Integer;
begin
  Canvas.Brush.Style := bsClear;
  H := Canvas.TextHeight('a');
  w := Canvas.TextWidth(AText);
  X := ARect.Left + (ARect.Right - ARect.Left - W) div 2;
  Y := ARect.Top + (ARect.Bottom - ARect.top - H) div 2;
  if X < ARect.Left then  X := ARect.Left;
  Canvas.TextOut(x, y, AText);

end;
可以用Bmp.weidth, bmp.height设置其大小,我用的是2007
shuihan20e 2014-03-06
  • 打赏
  • 举报
回复
bmp.SetSize(1, Rect.Bottom - Rect.Top); bmp无此方法 ADrawText(Canvas, Str, ARect);这个方法是你自己写的? 你delphi是哪个版本?
  • 打赏
  • 举报
回复
5.2,OnDrawHeader,应该都有吧
  • 打赏
  • 举报
回复
好像不能关联,要通过里面的事件来更改TlistView的大小,比如OnSectionResize,OnSectionTrack等.如果没有特殊要求,推荐用TRzListView来做,比较方便
shuihan20e 2014-03-06
  • 打赏
  • 举报
回复
引用 6 楼 lianzhu520610 的回复:
忘了,我用的是TRzListView,你可以用THeadControl来替换就行了
你的raize是哪个版本,我的没有DrawHeader事件
shuihan20e 2014-03-06
  • 打赏
  • 举报
回复
THeadControl如何和listview关联起来呢?
引用 1 楼 lianzhu520610 的回复:
1, 用THeadControl替换columnheader,OnDrawSection事件里面可以画你想要的颜色,形状。 2,ListView设置HeaderDefaultDrawing := False,在OnDrawHeader事件里面画。 2个方法都要自己完全画完头部,单单设置颜色是不行的
  • 打赏
  • 举报
回复
忘了,我用的是TRzListView,你可以用THeadControl来替换就行了
shuihan20e 2014-03-06
  • 打赏
  • 举报
回复
引用 4 楼 lianzhu520610 的回复:
procedure TForm1.RzListView1DrawHeader(Sender: TObject; Canvas: TCanvas;
  Index: Integer; Rect: TRect);
var
  bmp : TBitmap;
  Str: string;
  ARect: TRect;
begin
  bmp := TBitmap.Create;
  try
    bmp.SetSize(1, Rect.Bottom - Rect.Top);
    bmp.Canvas.Brush.Color := clBlue;
    bmp.Canvas.FillRect(bmp.Canvas.ClipRect);
    ARect := Rect;
    if Index = RzListView1.Columns.Count - 1  then
    begin
      ARect.Right :=  ARect.Right
    end;
    Canvas.StretchDraw(ARect, bmp);
    Canvas.Pen.Color := $00838383;
    Canvas.MoveTo(ARect.Right - 1, ARect.Top + 1);
    Canvas.LineTo(ARect.Right - 1, ARect.Bottom - 1);
    if Index = 0 then
    begin
      Canvas.Pen.Color := $FF6E6E6E;
      Canvas.MoveTo(ARect.Left , ARect.Top + 1);
      Canvas.LineTo(ARect.Left , ARect.Bottom - 1);
    end;
    Str := RzListView1.Columns[Index].Caption;
    ADrawText(Canvas, Str, ARect);
  finally
    bmp.Free;
  end;
end;
可以在bmp里面装图片,效果会比较好,THeadControl也是差不多的写法
你用的是raize里的,delphi自带的listview不可以吗?
  • 打赏
  • 举报
回复
procedure TForm1.RzListView1DrawHeader(Sender: TObject; Canvas: TCanvas;
  Index: Integer; Rect: TRect);
var
  bmp : TBitmap;
  Str: string;
  ARect: TRect;
begin
  bmp := TBitmap.Create;
  try
    bmp.SetSize(1, Rect.Bottom - Rect.Top);
    bmp.Canvas.Brush.Color := clBlue;
    bmp.Canvas.FillRect(bmp.Canvas.ClipRect);
    ARect := Rect;
    if Index = RzListView1.Columns.Count - 1  then
    begin
      ARect.Right :=  ARect.Right
    end;
    Canvas.StretchDraw(ARect, bmp);
    Canvas.Pen.Color := $00838383;
    Canvas.MoveTo(ARect.Right - 1, ARect.Top + 1);
    Canvas.LineTo(ARect.Right - 1, ARect.Bottom - 1);
    if Index = 0 then
    begin
      Canvas.Pen.Color := $FF6E6E6E;
      Canvas.MoveTo(ARect.Left , ARect.Top + 1);
      Canvas.LineTo(ARect.Left , ARect.Bottom - 1);
    end;
    Str := RzListView1.Columns[Index].Caption;
    ADrawText(Canvas, Str, ARect);
  finally
    bmp.Free;
  end;
end;
可以在bmp里面装图片,效果会比较好,THeadControl也是差不多的写法
shuihan20e 2014-03-06
  • 打赏
  • 举报
回复
HeaderDefaultDrawing这个属性没有 OnDrawHeader这个事件也没有 我用的delphi7
shuihan20e 2014-03-06
  • 打赏
  • 举报
回复
引用 1 楼 lianzhu520610 的回复:
1, 用THeadControl替换columnheader,OnDrawSection事件里面可以画你想要的颜色,形状。 2,ListView设置HeaderDefaultDrawing := False,在OnDrawHeader事件里面画。 2个方法都要自己完全画完头部,单单设置颜色是不行的
有代码吗?
  • 打赏
  • 举报
回复
1, 用THeadControl替换columnheader,OnDrawSection事件里面可以画你想要的颜色,形状。 2,ListView设置HeaderDefaultDrawing := False,在OnDrawHeader事件里面画。 2个方法都要自己完全画完头部,单单设置颜色是不行的

5,392

社区成员

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

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