ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2020-03-20 16:01:49  阅读:225  来源: 互联网

标签:ListView1 SubItems 技巧 Tlistview Listview1 Index Items Delphi Item


Delphi Tlistview[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  更新时间:

 

标签:ListView1,SubItems,技巧,Tlistview,Listview1,Index,Items,Delphi,Item
来源: https://www.cnblogs.com/guorongtao/p/12532289.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有