看CxGrid资料的时候,看见了一个为兄弟的文章,我就转一下了.
//需要Use CommCtrl Function GetSubItemRect( handle, ItemsIndex, SubIndex: Integer ): TRect ; Begin ListView_GetSubItemRect( Handle, ItemsIndex, SubIndex, 0, @Result ) ; End ; Procedure TFormMain.lvw_listCustomDrawSubItem( Sender: TCustomListView ; Item: TListItem ;SubItem: Integer ;State: TCustomDrawState ; Var DefaultDraw: Boolean ) ; Var l_Rect: TRect ; l_intPercent: Integer ; Begin If SubItem = 3 Then Begin If Item.Data = Nil Then Exit ; l_intPercent := PListData( Item.Data ).Percent ; //获取ListView子项的Rect l_Rect := GetSubItemRect( Item.Handle, Item.Index, SubItem ) ; //画一条外边框 InflateRect( l_Rect, -1, -1 ) ; Sender.Canvas.Brush.Color := clBlack ; Sender.Canvas.FrameRect( l_Rect ) ; //先填充底色 InflateRect( l_Rect, -1, -1 ) ; Sender.Canvas.Brush.Color := lvw_list.Color ; Sender.Canvas.FillRect( l_Rect ) ; //再根据进度画出完成区域 If l_intPercent = 100 Then Sender.Canvas.Brush.Color := clGreen Else Sender.Canvas.Brush.Color := clPurple ; l_Rect.Right := l_Rect.Left + Floor( ( l_Rect.Right - l_Rect.Left ) * l_intPercent / 100 ) ; Sender.Canvas.FillRect( l_Rect ) ; //恢复笔刷 Sender.Canvas.Brush.Color := lvw_list.Color ; //关键的一句,屏蔽系统自绘过程 DefaultDraw := False ; End ; End ; 相关定义 Type TListData = Record FileName: String ; Percent: Integer ; End ; PListData = ^TListData ; 本文来自CSDN博客,转载请标明出处:http: //blog.csdn.net/kwbin/archive/2008/11/26/3381317.aspx 效果图:
|
请发表评论