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 位开始查找,找到最后。
(4)Scroll 方法
此方法可以使列表视图滚动。Scroll 方法有两个Integer 类型的参数。- DX:控制视图的左右一次移动的像素数,正数代表向右移动,负数代表向左移动。
- DY:控制视图的上下一次移动的像素数,正数代表向下移动,负数代表向上移动。
(5)StringWidth 方法
此方法用于返回字符串的宽度。StringWidth 方法中用到一个String 类型的参数S,StringWidth 方法是根据当前TListView 组件的字体、字号返回参数S 指定的字符串宽度的像素数。(6)UpdateItems 方法
此方法可以重画指定范围内的项。UpdateItems 有两个Integer 类型的参数:- FirstIndex:用于指定重画项的开始位置。
- LastIndex:用于指定重画项的最后位置。