在TListView控件中添加进度条效果
发布于: 2012/12/11 22:47:21 | 发布在: Delphi文章 | 点击:
当然并不是真的添加一个进度条,而是通过添加ListView1的“OnAdvancedCustomDrawSubItem”事件的响应代码在指定的格子中绘制出一个进度条效果的方框,具体代码如下:
procedure TForm1.ListView1AdvancedCustomDrawSubItem(
Sender: TCustomListView; Item: TListItem; SubItem: Integer;
State: TCustomDrawState; Stage: TCustomDrawStage;
var DefaultDraw: Boolean);
const
p_Col = 1; //需绘制进度条的列号
var
r, tr: TRect;
c: TCanvas;
i: Integer;
oldColor: TColor;
pStr: String;
begin
pStr := Item.SubItems[p_Col]; //百分制的进度值,如:75.50
oldColor:= Sender.Canvas.Brush.Color;
c := (Sender as TListView).Canvas;
r := Item.DisplayRect(drBounds);
for i:=0 to p_Col do r.Left := r.Left + (Sender as TListview).columns[i].Width;
r.Right := r.Left + (Sender as TListview).columns[p_Col+1].Width - 2;
r.Left := r.Left + 2;
r.Top := r.Top + 2;
r.Bottom := r.Bottom-2;
c.Rectangle(r);
tr.Left := r.Left + 1;
tr.Top := r.Top + 1;
tr.Bottom := r.Bottom - 1;
tr.Right:=tr.Left + Trunc((r.Right - r.Left - 2) * StrToFloat(pStr) / 100);
c.Brush.Color :=clYellow;
c.FillRect(tr);
SetBkMode(c.handle, TRANSPARENT);
c.TextOut(r.Left + Trunc((r.Right - r.Left)/2) - 10, r.Top + 1 , pStr + '%');
Sender.Canvas.Brush.Color := oldColor;
end;