Delphi(TListView)列表視圖組件詳解
TListView 組件以多種形式顯示列表的項目,如詳細資料、小圖標、大圖標等形式表示列表中的項目。
列表視圖與用TListBox 組件實現的列表框很是類似。不一樣的是,列表視圖可讓用戶選擇不一樣的顯示方式,諸如大圖標方式、小圖標方式、簡單列表方式和詳細列表方式等。Windows XP 的資源管理器就是一個典型的列表視圖。
一.TListView 組件的典型用法
列表視圖的顯示方式是經過ViewStyle 屬性設置的。當ViewStyle 屬性設爲vsReport 時,列表視圖將以詳細列表的方式顯示。以Windows XP 的資源管理器爲例,當選中「查看」菜單上的「詳細資料」命令時,列表視圖中將顯示文件或文件夾的圖標、名稱、字節數、類型和上次修改時間等信息。
以詳細列表方式顯示時,須要把Columns 屬性設爲須要的欄數,若是要給每一欄顯示一個表頭,必須把ShowColumnHeaders 屬性設爲True。若是把ColumnClick 屬性設爲True,每一欄的表頭就至關於一個按鈕,單擊這些按鈕將觸發OnColumnClick 事件。單擊「名稱」這一欄表頭,目錄中的文件將按文件名的字母進行排序。單擊「大小」這個按鈕,目錄中的文件將以文件的字節數進行排序。
程序應當爲列表視圖中的每一項指定圖標。所以須要創建兩個圖像列表,一個用於大圖標顯示方式,另外一個用於小圖標顯示方式(由於這兩種方式下的圖標大小是不一樣的),而後分別設置LargeImages屬性和SmallImages 屬性指定這兩個圖像列表。
二.TListView 組件的重要屬性
·BoundingRect |
返回一個能把列表視圖中全部項包住的矩形 |
·CheckBoxed |
列表視圖中項的旁邊將顯示覆選框 |
·Column |
此屬性能夠訪問列表視圖中的每一欄 |
·ColumnClick |
此屬性設爲True時,將觸發OnColumnClick事件 |
·Columns |
列表視圖的每一項將分紅不少欄 |
·FlatScrollBars |
列表視圖的滾動條是平坦的 |
·FullDrag |
容許用戶拖動表頭 |
·GridLines |
此屬性將顯示柵格線 |
·HideSelection |
當輸入焦點移走時,原先選擇的節點是否處於被選擇狀態 |
·HotTrack |
當鼠標指向某個項時,該項的外觀將不同凡響 |
·HoverTime |
此屬性用於設置鼠標必須停留多久才能選擇一個項,1000表明1秒 |
·ItemFocused |
指定或返回列表視圖中具備輸入焦點的項 |
·Items |
表明列表視圖中的全部項 |
·LargeImages |
此屬性用於指定大圖標顯示方式下大圖標所在的圖像列表 |
·MultiSelect |
若是此屬性設爲True,用戶能夠同時選擇多個項 |
·ReadOnly |
列表視圖是隻讀的 |
·RowSelect |
用戶能夠一次選擇一整行 |
·SelCount |
返回列表視圖中被選擇的項的數目 |
·Selected |
此屬性用於設置返回列表視圖中被選擇的項 |
·SmallImages |
指定小圖標顯示方式下小圖標所在的圖像列表 |
·ShowWorkAreas |
經過定義工做區,能夠把圖標分組 |
·SortType |
此屬性用於設置什麼狀況下列表視圖中的項將從新排序 |
·StateImages |
此屬性用於指定一個圖像列表 |
·TopItem |
返回列表視圖中當前可見的最頂端的項 |
·ViewStyle |
設置列表視圖的顯示方式 |
(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 屬性
此屬性用於設置什麼狀況下列表視圖中的項將從新排列。它設定了以下4 個用戶可選值。
- vsIcon:以大圖標方式顯示。
- vsSmallIcon:以小圖標方式顯示。
- vsList:以簡單列表方式顯示,不能進行拖放操做。
- vsReport:以詳細列表方式顯示,最左邊的欄顯示項的圖標和標籤。
三.TListView 組件的重要事件
OnColumnClick |
當用戶單擊欄的表頭時,將觸發該事件 |
OnColumnDragged |
當用戶用鼠標左鍵拖動某一欄到一個新的位置時,將觸發該事件 |
OnEdited |
當用戶直接編輯修改了項的標籤後,將觸發該事件 |
OnGetImageIndex |
當一個項將要在屏幕上刷新時,將觸發這個事件 |
OnInfoTip |
經過這個事件給列表視圖中的每一項加上提示 |
OnSelectItem |
當列表視圖中一個項被選擇時,將觸發這個事件 |
下面介紹程序中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 組件的重要方法
AlphaSort |
將列表視圖中的項按標籤的字母順序排序 |
Arrange |
此方法用於重排圖標 |
FindCaption |
此方法用於搜索並返回一個項 |
Scroll |
此方法使列表視圖滾動 |
StringWidth |
此方法返回字符串的寬度 |
UpdateItems |
此方法重畫指定範圍內的項 |
下面介紹程序中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:用於指定重畫項的最後位置。