zoukankan      html  css  js  c++  java
  • [转]Delphi 常用控件之TlistView总结

    Delphi 常用控件之TlistView总结

    要用到的(大部分是TListView的ViewStyle属性设为vsReport下的):

    TListView 组件的常用属性

    (3)Column 属性

    此属性可以访问列表视图中每一栏,Index 指定栏的序号。此属性仅当ViewStyle 属性设为vsReport时有效。

    (4)ColumnClick 属性

    如果此属性设为True,栏的表头(如果有的话)将同时作为按钮用,按下这些按钮,将触发OnColumnClick 事件,通常用于对列表视图中的项进行重新排序。

    (10)RowSelect 属性

    在ViewStyle 属性设为vsReport 的前提下,如果把此属性设为True,用户可以一次选择一整行。

    (11)Selected 属性

    此属性用于设置返回列表视图中被选择的项。如果有多项被选择,返回的是当前有输入焦点的项。

    (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 参数可以对用户选中的栏进行访问及设置。

    (5)OnSelectItem 事件

    当列表视图中一个项被选择时,将触发这个事件。OnSelectItem 事件中有一个TListItem 类型的参数Item,利用此参数可以对用户编辑的项进行访问;OnSelectItem 事件中还有一个Boolean 类型的参数Selected。每次选择一个新项时将两次触发此事件,一次是释放以前被选择的项,Selected 参数取值为False,代表释放Item 参数指定的项;另外一次是选择新的项,Selected 参数取值为True,代表选择Item 参数指定的项。

    TListView 组件常用的方法

    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判断。

  • 相关阅读:
    shell 文件夹总大小 du -sh 文件夹
    java dump
    图片上传-下载-删除等图片管理的若干经验总结2
    android开发之shape详解
    图片上传-下载-删除等图片管理的若干经验总结
    图片上传-下载-删除等图片管理的若干经验总结
    一个奇怪的Java集合问题
    小米开源文件管理器MiCodeFileExplorer-源码研究(0)-初步研究
    小米开源文件管理器MiCodeFileExplorer-源码研究(0)-初步研究
    APK文件浅析-Android
  • 原文地址:https://www.cnblogs.com/ufindme/p/4433037.html
Copyright © 2011-2022 走看看