# TlistView組件功能:
(1) TListView 控件可以用來顯示各項帶圖標的列表,包括大圖標和小圖標的;也可以用來顯示帶有子項的列表,Windows操作系統的資源管理器中文件夾窗口就是最好的應用例子,就是我們打開"我的電腦"后能夠看到各個盤符的界面
( 2) TListView控件基本能實現和DBGrid控件一樣的功能,很多時候根據程序需要可以完全用TListView來替換DBGrid;只要將TListView的ViewStyle屬性設為vsReport,然后再配合其他幾個屬性(這個稍后說明),就可以實現DBGrid中的綁定數據庫、數據添加、修改、刪除、不同列的不同顏色顯示及單擊標題排序等等一系列常用的功能;
# TListView 組件的常用屬性
(1)BoundingRect 屬性
此屬性返回一個能把列表視圖中所有項包住的矩形。此屬性僅在ViewStyle 屬性設為vsIcon 或vsSmallIcon 時有效。
(2)CheckBoxed 屬性
當ViewStyle 屬性設為vsList 或vsReport 時,如果把CheckBoxes 屬性設為True,列表視圖中項的旁邊將顯示復選框,如同TCheckListBox 組件一樣。
(3)Column 屬性
此屬性可以訪問列表視圖中每一欄,Index 指定欄的序號。此屬性僅當ViewStyle 屬性設為vsReport時有效。
(4)ColumnClick 屬性
如果此屬性設為True,欄的表頭(如果有的話)將同時作為按鈕用,按下這些按鈕,將觸發OnColumnClick 事件,通常用于對列表視圖中的項進行重新排序。
(5)Columns 屬性
如果ViewStyle 屬性設為vsReport,列表視圖的每一項將分成多欄,每一欄都是一個TListColumn對象,所有的欄構成TListColumn 對象。
在設計期,可以單擊Columns 屬性旁的省略號"…"按鈕打開"Editing Columns"窗口,然后建立和編輯欄的屬性。
(6)HideSelection 屬性
如果此屬性設為True,當輸入焦點從列表視圖移到其他組件上時,原先選擇的節點將不再處于被選擇狀態。如果此屬性設為False,當輸入焦點移走時仍然保持選擇狀態。
(7)ItemFocused 屬性
此屬性指定或返回列表視圖中具有輸入焦點的項。一個列表視圖中可以同時有多個項被選擇,但只能有一個項具有輸入焦點。
(8)Items 屬性
此屬性代表列表視圖中的所有項。列表視圖中的每一項是一個TListItem 對象。在設計期,可以按下Items 屬性旁的"..."按鈕打開"ListView Items"編輯器,然后建立和編輯列表視圖中的每一項.
(9)MultiSelect 屬性
如果此屬性設為True,用戶可以同時選擇多個項。
(10)RowSelect 屬性
在ViewStyle 屬性設為vsReport 的前提下,如果把此屬性設為True,用戶可以一次選擇一整行。
(11)Selected 屬性
此屬性用于設置返回列表視圖中被選擇的項。如果有多項被選擇,返回的是當前有輸入焦點的項。
(12)ShowWorkAreas 屬性
在ViewStyle 屬性設為vsIcon 或vsSmallIcon 的情況下,通過定義工作區,可以把圖標分組,如果ShowWorkAreas 屬性設為True,列表視圖將把客戶區分成幾個工作區,每個工作區的顏色由TWorkArea的Color 屬性指定,標簽由TWorkArea 的DisplayName 屬性指定。
(13)SortType 屬性
此屬性用于設置什么情況下列表視圖中的項將重新排列。它設定了如下4 個用戶可選值。
? stNone:不重新排序。
? stData:項的Data 屬性發生變化時重新排序。
? stText:項的Caption 屬性發生變化時重新排序。
? stBoth:項的Data 屬性或Caption 屬性發生變化時重新排序。
(14)ViewStyle 屬性
ListView 控件作為一個可以顯示圖標或者子項的列表控件,它最重要的屬性就是 ViewStyle 屬性,該屬性決定了以哪種視圖模式顯示控件的項,這四種視圖模式分別如下:
1\. vsIcon:大圖標視圖模式,在項的文本旁顯示大的圖標,在控件寬度足夠的情況下,項是優先以平行排列的,排列不完的則自動換行顯示在新行中。這個屬性要和TListView的LargeImages屬性一起使用;
2\. vsSmallIcon:小圖標視圖模式,與大圖標模式一樣,但是顯示的是小的圖標;要和TListView的SmallImages屬性一起使用;
3\. vsList:列表視圖模式,可以顯示小圖標,但是項是垂直排列的,只顯示單列,不能進行拖放操作;
4\. vsReport:詳細資料視圖模式,是最豐富的選項,可以基本實現DBGrid的所有功能;它不但允許您查看項,還允許您查看為各項指定的任何子項。各項在網格中顯示,它們垂直排列且其子項會顯示在列中(帶有列標頭)。對應地,只有在Details 視圖模式中起作用的控件屬性為:GridLines 和 FullRowSelect,GridLines 屬性指示在包含控件中項及其子項的行和列之間是否顯示網格線。FullRowSelect 屬性指示單擊某項是否選擇其所有子項(即整行選中)
Columns屬性是用來設置有哪些列,這個可以在設計時事先設定,也可以在程序中設定:ListView1.Columns.Items\[0\].Caption:= '列1';
ListView1.Columns.Items\[1\].Caption:= '列2';//添加列
ListView1.Columns.Items\[2\].Caption:= '列3';
ListView1.Columns.Items\[2\].Width:=300; //這里設定列的寬度
TListView的Items屬性也是很重要的,用來向ListView中添加數據, Items屬性是一個TListItem類,在進行數據添加時一般先定義個TListItem類。
# TListView 組件的常用事件
(1)OnColumnClick 事件
當用戶單擊欄的表頭時,將觸發該事件。這樣就可以對項進行排序。在OnColumnClick 事件中有一個TListColumn 類型的參數Column,此參數返回用戶單擊的欄,利用Column 參數可以對用戶選中的欄進行訪問及設置。
(2)OnColumnDragged 事件
當用戶用鼠標左鍵拖動某一欄到一個新的位置時,將觸發該事件。在使用此事件之前必須將TListView 組件的FullTrag 屬性設置為True,表示可以拖動欄的位置,否則不能拖動,也就不能觸發此事件。
(3)OnEdited 事件
當用戶直接編輯修改了項的標簽后,將觸發該事件。OnEdited 事件中有一個TListItem 類型的參數Item,利用此參數可以對用戶編輯的項進行訪問;OnEdited 事件中還有一個String 類型的參數S,它是用戶更改項的標簽后,顯示標簽的內容。
(4)OnInfoTip 事件
通過這個事件可以為列表視圖中的每一項加上提示。OnInfoTip 事件中有一個TListItem 類型的參數Item,利用此參數可以對用戶編輯的項進行訪問;OnInfoTip 事件中還有一個String 類型的參數InfoTip,更改它的值就可以為每一項加上提示。
例如將每一項的提示設置為項的標簽內容,就可以在OnInfoTip 事件中添加如下代碼:
InfoTip:=Item.Caption;
如果要顯示提示信息,必須將TListView 組件的ShowHind 屬性設置為True。
(5)OnSelectItem 事件
當列表視圖中一個項被選擇時,將觸發這個事件。OnSelectItem 事件中有一個TListItem 類型的參數Item,利用此參數可以對用戶編輯的項進行訪問;OnSelectItem 事件中還有一個Boolean 類型的參數Selected。每次選擇一個新項時將兩次觸發此事件,一次是釋放以前被選擇的項,Selected 參數取值為False,代表釋放Item 參數指定的項;另外一次是選擇新的項,Selected 參數取值為True,代表選擇Item 參數指定的項。
# TListView 組件常用的方法
(1)AlphaSort 方法
此方法可以將列表視圖中的項按標簽的字母順序排序。例如使用下面的代碼就能夠將ListView1組件的項按標簽的字母順序排序:
ListView1.AlphaSort;
(2)Arrange 方法
此方法用于重排圖標。Arrange 方法只有在ViewStyle 屬性為vsIcon 或vsSmallIcon 時才起作用。
Arrange 方法中有一個TListArrangement 類型的參數Code,此參數用于指定圖標的排列方式,其取值及功能如下。
? arAlignBottom:圖標底部對齊排列。
? arAlignLeft:圖標左側對齊排列。
? arAlignRight:圖標右側對齊排列。
? arAlignTop:圖標頂部對齊排列。
? arDefault:按照窗口剛建立時的風格將圖標從頂部排列。
? arSnapToGrid:將圖標對齊到最近的網格,此值不支持虛擬模式。
(3)FindCaption 方法
此方法的調用可以搜索并返回一個TListItem 類型的項。FindCaption 方法中有5 個參數,功能如下。
? StartIndex:Integer 類型,用于指定開始搜索的起始位置。
? Value:String 類型,指定要搜索的項的標題符合的內容。
? Partial:Boolean 類型,取True 值,查找標題開頭為Value 參數指定的項;取False 值,查找標題與Value 參數指定的內容相同的項。
? Inclusive:Boolean 類型,取True 值,被StartIndex 指定的項是第1 個被選中的;取False 值,開始查找的位置從StartIndex 擬定的下一個位置開始。
? Warp:Boolean 類型,取True 值,搜索將從開始找到最后;取False 值,搜索從StartIndex 位開始查找,找到最后。
FindCaption 方法返回的是第1 個被找到的符合條件的項,如果沒找到符合條件的,則返回列表中的第1 項。
(4)Scroll 方法
此方法可以使列表視圖滾動。Scroll 方法有兩個Integer 類型的參數。
? DX:控制視圖的左右一次移動的像素數,正數代表向右移動,負數代表向左移動。
? DY:控制視圖的上下一次移動的像素數,正數代表向下移動,負數代表向上移動。
(5)StringWidth 方法
此方法用于返回字符串的寬度。StringWidth 方法中用到一個String 類型的參數S,StringWidth 方法是根據當前TListView 組件的字體、字號返回參數S 指定的字符串寬度的像素數。
(6)UpdateItems 方法
此方法可以重畫指定范圍內的項。UpdateItems 有兩個Integer 類型的參數:
? FirstIndex:用于指定重畫項的開始位置。
? LastIndex:用于指定重畫項的最后位置。
# TlistView組件的使用方法
引用CommCtrl單元
(1)賦值
with ListView1.Items.Add do
begin
Caption:=caption; //添加第一項
SubItems.add(aaaaa); //
SubItems.add(1234);
SubItems.add(1234);
end;
with ListView1 do
begin
ListItem:=Items.Add;
ListItem.Caption:='第一列內容';
ListItem.SubItems.Add('第二列內容');
end;
(2)取值
Edit1.Text := listview1.Items\[i\].Caption; //讀第i行第1列
Edit2.Text := listview1.Items\[i\].SubItems.strings\[0\]; //讀第i行第2列
Edit3.Text := listview1.Items\[i\].SubItems.strings\[1\]; //讀第i行第3列
listview1.Items.Item\[i\].Caption 取得某條數據標題
listview1.Items.Item\[i\].SubItems.Strings\[j\] 取得某條數據內容
listview1.Items.Item\[i\].SubItems.CommaText 一條記錄的全部內容,格式: "標題","內容1","內容2",....
listview1.Items.Item\[i\].SubItems.Text 一條記錄的全部內容,格式: 標題,內容,內容2....
(3)刪除
listview1.Items.Item\[i\].Delete; 刪除一條數據
(4)數據類型(長度)定義
i:=ListView1.Items.Count 數據條數
listview1.Items.Item\[i\].Selected 該條數據選中否(MultiSelect決定單選復選)
(5) 清除數據
ListView1.Items.Clear; 清除數據
(6)插入一列
DestItem := lvList.Items.Insert(CurItem.Index );//在當前列前面插入一列
DestItem := lvList.Items.Insert(CurItem.Index + 1);//在當前列后面插入一列
然后對DestItem按(1)中的方法賦值,注意對于每條記錄Item,其Item.SubItems.Count可能不同。
(7)刪除一列
lvList.Items.Delete(tItem.Index);//刪除當前列
lvList.Items.Delete(tItem.Index + 1);//刪除當前列后面一列,要先判斷其存在
//這是個通用的過程
procedure ListViewItemMoveUpDown(lv : TListView; Item : TListItem; MoveUp, SetFocus : Boolean);
var
DestItem : TListItem;
begin
if (Item = nil) or
((Item.Index - 1 < 0) and MoveUp) or
((Item.Index + 1 >= lv.Items.Count) and (not MoveUp))
then Exit;
lv.Items.BeginUpdate;
try
if MoveUp then
DestItem := lv.Items.Insert(Item.Index - 1)
else
DestItem := lv.Items.Insert(Item.Index + 2);
DestItem.Assign(Item);
lv.Selected := DestItem;
Item.Free;
finally
lv.Items.EndUpdate;
end;
if SetFocus then lv.SetFocus;
DestItem.MakeVisible(False);
end;
//此為調用過程,可以任意指定要移動的Item,下面是當前(Selected)Item
ListViewItemMoveUpDown(ListView1, ListView1.Selected, True, True);//上移
ListViewItemMoveUpDown(ListView1, ListView1.Selected, False, True);//下移
# TlistView組件常用技巧
**實現不同行顏色不一樣**
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin //OwnerDraw應該設置為False
if Item.Index mod 2 =0 then
Sender.Canvas.Brush.Color :=clSkyBlue
else
Sender.Canvas.Brush.Color :=clWhite;
end;
**實現單擊列表標題進行排序**
function CustomSortProc(Item1, Item2: TListItem; ColumnIndex: integer): integer; stdcall;
begin
if ColumnIndex = 0 then
Result := CompareText(Item1.Caption,Item2.Caption)
else
Result := CompareText(Item1.SubItems\[ColumnIndex-1\],Item2.SubItems\[ColumnIndex-1\])
end;
procedure TFrmMain.TypeLvColumnClick(Sender: TObject; Column: TListColumn);
begin
TypeLv.CustomSort(@CustomSortProc,Column.Index);
end;
**判斷當前單擊的哪一行**
GetCursorPos(p);
p := lvList.ScreenToClient(p);
CurItem := lvList.GetItemAt(p.X, p.Y);
ARect:= CurItem.DisplayRect(drBounds);
**根據存入的Data找到指定的Item**
curItem := lvRoomList.FindData(0, AData, True, False);
**在vsReport模式下第一列插入兩個圖標**
lvList.SmallImages,lvListStateImages分別關聯一個TimageList對象,TimageList對象對象中存入所有要顯示的圖標,對與TlistView 的vsReport模式下的每一條記錄TlistItem對象tItem,可分別通過tItem.ImageIndex和tItem.StateIndex來控制顯示TimageList對象中的哪個圖標,一般tItem.StateIndex顯示的圖標在前,tItem.ImageIndex顯示的圖標在后,若要判斷單擊事件是鼠標單擊哪個圖標的,可通過GetCursorPos(p);獲得鼠標坐標后判斷橫坐標即P.X判斷。
- 1.制作Android Splash啟動界面
- 2.delphi之完美Splash方案
- 3. Android實例-解決虛擬鍵盤遮擋問題
- 0.Android開發小技巧
- 設 置 您 的 開 發 環 境 Windows PC(Android)
- Delphi XE控件
- 手機屏幕自適應程序問題
- 手勢操作
- delphi xeandroid對硬件操作
- Datasnap
- Delphi XE 10 跨平臺三層數據庫應用教程
- 開發數據庫三層應用的DataSnap
- ListView
- delphi xe10之控件 listview 的強大功能
- FMX.TListView的基本用法
- 初探ListView 的使用方法
- Delphi 常用控件之TlistView總結
- ListView基本用法大全
- android實現透明度可以調整的對話框
- android 獲取網絡狀態
- FMXUI
- FMXUI - ListView用法簡介