Delphi - 在ListView中添加一個(gè)進(jìn)度條Delphi 2009-12-15 15:22:35 閱讀206 評(píng)論0 字號(hào):大中小 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.Da Exit ; l_intPercent := PListData( Item.Da //獲取ListView子項(xiàng)的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 ) ; //再根據(jù)進(jìn)度畫出完成區(qū)域 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 ) ; //恢復(fù)筆刷 Sender.Canvas.Brush.Color := lvw_list.Color ; //關(guān)鍵的一句,屏蔽系統(tǒng)自繪過程 DefaultDraw := False ; End ; End ; 相關(guān)定義 Type TListData = Record FileName: String ; Percent: Integer ; End ; PListData = ^TListData ; 本文來自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http: //blog.csdn.net/kwbin/archive/2008/11/26/3381317.aspx 效果圖: ![]() |
|