許多知名的下載軟件中都有下載管理器,用一個TListView來顯示下載的進程,你可以清楚的看到已經下載了多少,還有多少內容仍需下載,這樣的控件,Delphi自身並未提供,但我們可以在TListView的基礎之上加入進度條控件(TProgressBar)來實現這一功能,這樣就能既能滿足我們的實際需求,又不用“犧牲”口袋裡白花花的銀子,還能增加我們對控件嵌套的認識,一箭三雕,何樂而不為呢?
到底該怎麼做呢?讓我想想……好了讓我們先從TListView的ViewStyle屬性開始吧,這個屬性我們常用,把TListView做為一個表格來顯示各種數據時,我們常常把這個屬性設置成vsReport,設置之後,最左邊的列(Column)包含一個小的圖標和數據,從第二列開始就是顯示一個個字段的數據,這是我們最常見的TListView的樣子,每天一打開Windows的資源管理器,我們就能看到它。
打開Delphi,新建一個工程,在自動生成的Form上,放置一個TListView控件,在它的Columns屬性中定義兩列,第一列放置數據項(Item),第二列用來存放Progress.
在Form上加入一個按鈕(Button),在按鈕的Click事件中加入如下代碼,用於在按下按鈕時,可以在TListView的第二列顯示TProgress。添加Item的代碼如下:
procedure TForm1.AddItemButtonClick(Sender: TObject);
const
pbColumnIndex = 1;
pbMax = 100;
var
li : TListItem;
lv : TListView;
pb : TProgressBar;
pbRect : TRect;
begin
lv := ListViewEx1;
//建立一個新的ListItem
li := lv.Items.Add;
li.Caption := ’Item ’ + IntToStr(lv.Items.Count);
//建立一個ProgressBar,置入TListView的第二列中
pb := TProgressBar.Create(nil);
pb.Parent := lv;
li.Data := pb;
pbRect := li.DisplayRect(drBounds);
pbRect.Left := pbRect.Left +
lv.Columns[-1 + pbColumnIndex].Width;
pbRect.Right := pbRect.Left +
lv.Columns[pbColumnIndex].Width;
pb.BoundsRect := pbRect;
end; //添加ItemButton事件