zoukankan      html  css  js  c++  java
  • Delphi TListview[2] 常用方法和技巧

    Delphi Listview[2] 常用方法和技巧

    引用CommCtrl单元

    (1)赋值

    with ListView1.Items.Add do begin
      Caption:=caption; //添加第一项
      SubItems.add(11); //
      SubItems.add(22);
      SubItems.add(33);
    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.Clear; //清除数据
    ListView1.Items.Clear; //清除数据

    (6)插入一列

    DestItem := Listview1.Items.Insert(CurItem.Index );//在当前列前面插入一列
    DestItem := Listview1.Items.Insert(CurItem.Index + 1);//在当前列后面插入一列

    (7)删除一列

    begin
      ListView1.Items.Delete(tItem.Index); //删除当前列
      ListView1.Items.Delete(tItem.Index + 1); //删除当前列后面一列,要先判断其存在
    end;
    
    
    //这是个通用的过程
    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);//下移
    

      

    示例1:实现不同行颜色不一样

    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;

    示例2:实现单击列表标题进行排序

    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;:

    示例3:判断当前单击的哪一行

    begin
      GetCursorPos(p);
      p := lvList.ScreenToClient(p);
      CurItem := lvList.GetItemAt(p.X, p.Y);
      ARect:= CurItem.DisplayRect(drBounds);
    end;

    示例4:根据存入的Data找到指定的Item

    curItem := lvRoomList.FindData(0, AData, True, False);:

    示例5:在vsReport模式下第一列插入两个图标

    SmallImages,StateImages分别关联一个TimageList对象,TimageList对象对象中存入所有要显示的图标,对与TlistView 的vsReport模式下的每一条记录TlistItem对象tItem,

    可分别通过 tItem.ImageIndex 和 tItem.StateIndex 来控制显示TimageList对象中的哪个图标,

    一般tItem.StateIndex显示的图标在前,tItem.ImageIndex显示的图标在后,

    若要判断单击事件是鼠标单击哪个图标的,可通过GetCursorPos(p);获得鼠标坐标后判断横坐标即P.X判断。

     

     创建时间:2020.03.20  更新时间:

     

  • 相关阅读:
    C# 3.0新特性
    WinForm上显示gif动画
    Sql Server中Case函数的使用(上篇)转载
    Jquery的$命名冲突:
    Sql Server中case函数的使用(下篇) 转载
    hdu 2544 2066 1874 2680
    伤感!
    hdu 1999 不可摸数
    hdu 1878欧拉回路
    hdu 2767
  • 原文地址:https://www.cnblogs.com/guorongtao/p/12532289.html
Copyright © 2011-2022 走看看