Delphi TListView显示项里画进度条

TListView有丰富的表现形式,可以显示大图标,小图标,详细信息等。以下过程介绍如何在显示详细信息方式时,在其中的某一个子项上画出进度条。这对于设备监控程序是比较有用的,可用来表示设备连接的时间等。 TListView 有一个AdvancedCustomDrawSubItem 方法,双击这个名称即可进入以下函数体。
//在指定的子项上自画进度条。倒计数减
procedure Tfm_SocketManage.LV_StationAdvancedCustomDrawSubItem(
  Sender: TCustomListView; Item: TListItem; SubItem: Integer;
  State: TCustomDrawState; Stage: TCustomDrawStage;
  var DefaultDraw: Boolean);
var
  i:integer;
  cvs:TCanvas;
  tr:TRect;
  w:integer;
begin
  if Item.SubItems.Count <5 then exit; //如果显示子项数不足5个,不画。当Item还在建立时就开始画可能会出错
  try
    if subitem=6 then //当前要画的子项是第6项
    begin
      psck:=PSocketRecord(Item.Data); //跟这个项显示内容有关的结构体,保存应该画多少的值
      if (psck<>nil) and (psck.overtime <=17) then i:=psck.overtime
      else i:=0;
      if Boolean(ListView_GetSubItemRect(sender.Handle,item.Index,subitem,LVIR_BOUNDS,@tr)) then //取得要画的区域
      begin
        cvs:=sender.Canvas; //绘画的TCanvas
        w:=tr.Right -tr.Left; //确定要画的范围。
        if w=0 then w:=1;
        w:=(17-i)*w div 17;
        tr.Top :=tr.Top +3;
        tr.Right :=tr.Left +w;
        Dec(tr.Bottom,4);
        cvs.Brush.Color :=clBlue; //设定画刷颜色
        cvs.FillRect(tr); //填充要画的区域
      end;
      DefaultDraw:=false; //不需要下一步再绘画了
    end;
  except
  end;
end;
只要Canvas对象取到了,在上面画些什么就完全可以发挥创意性了,画图,打字,渐变,能想的都可以做。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值