Delphi TListview[2] 常用方法和技巧
<p><span style="font-size: 16px"><strong>Delphi Listview 常用方法和技巧</strong></span></p><p align="left"><span style="font-size: 16px">引用CommCtrl单元</span></p>
<p align="left"><span style="font-size: 16px">(1)赋值</span></p>
<div class="cnblogs_Highlighter">
<pre class="brush:delphi;gutter:true;"><span style="font-size: 16px">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;</span></pre>
</div>
<p align="left"><span style="font-size: 16px">(2)取值</span></p>
<div class="cnblogs_Highlighter">
<pre class="brush:delphi;gutter:true;"><span style="font-size: 16px">Edit1.Text := Listview1.Items.Caption; //读第i行第1列
Edit2.Text := Listview1.Items.SubItems.strings; //读第i行第2列
Edit3.Text := Listview1.Items.SubItems.strings; //读第i行第3列
Listview1.Items.Item.Caption;// 取得某条数据标题
Listview1.Items.Item.SubItems.Strings;// 取得某条数据内容
Listview1.Items.Item.SubItems.CommaText;// 一条记录的全部内容,格式: "标题","内容1","内容2",....
Listview1.Items.Item.SubItems.Text;// 一条记录的全部内容,格式: 标题,内容,内容2....</span></pre>
</div>
<p align="left"><span style="font-size: 16px">(3)删除</span></p>
<div class="cnblogs_Highlighter">
<pre class="brush:delphi;gutter:true;"><span style="font-size: 16px">Listview1.Items.Item.Delete; //删除一条数据 </span></pre>
</div>
<p align="left"><span style="font-size: 16px">(4)数据类型(长度)定义</span></p>
<div class="cnblogs_Highlighter">
<pre class="brush:delphi;gutter:true;"><span style="font-size: 16px">i:=ListView1.Items.Count ;//数据条数
Listview1.Items.Item.Selected;//该条数据选中否(MultiSelect决定单选复选)</span></pre>
</div>
<p align="left"><span style="font-size: 16px">(5) 清除数据</span></p>
<div class="cnblogs_Highlighter">
<pre class="brush:delphi;gutter:true;"><span style="font-size: 16px">ListView1.Clear; //清除数据
ListView1.Items.Clear; //清除数据</span></pre>
</div>
<p align="left"><span style="font-size: 16px">(6)插入一列</span></p>
<div class="cnblogs_Highlighter">
<pre class="brush:delphi;gutter:true;"><span style="font-size: 16px">DestItem := Listview1.Items.Insert(CurItem.Index );//在当前列前面插入一列
DestItem := Listview1.Items.Insert(CurItem.Index + 1);//在当前列后面插入一列</span></pre>
</div>
<p align="left"><span style="font-size: 16px">(7)删除一列</span></p>
<div class="cnblogs_Highlighter">
<pre class="brush:delphi;gutter:true;"><span style="font-size: 16px">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);//下移
</span></pre>
</div>
<p><span style="font-size: 16px"> </span></p>
<p><span style="font-size: 16px"><strong>示例1:实现不同行颜色不一样</strong></span></p>
<div class="cnblogs_Highlighter">
<pre class="brush:delphi;gutter:true;"><span style="font-size: 16px">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;</span></pre>
</div>
<p align="left"><span style="font-size: 16px"><strong>示例2:实现单击列表标题进行排序</strong></span></p>
<div class="cnblogs_Highlighter">
<pre class="brush:delphi;gutter:true;"><span style="font-size: 16px">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, Item2.SubItems)
end;
procedure TFrmMain.TypeLvColumnClick(Sender: TObject; Column: TListColumn);
begin
TypeLv.CustomSort(@CustomSortProc, Column.Index);
end;:</span></pre>
</div>
<p align="left"><span style="font-size: 16px"><strong>示例3:判断当前单击的哪一行</strong></span></p>
<div class="cnblogs_Highlighter">
<pre class="brush:delphi;gutter:true;"><span style="font-size: 16px">begin
GetCursorPos(p);
p := lvList.ScreenToClient(p);
CurItem := lvList.GetItemAt(p.X, p.Y);
ARect:= CurItem.DisplayRect(drBounds);
end;</span></pre>
</div>
<p align="left"><span style="font-size: 16px"><strong>示例4:根据存入的</strong><strong>Data</strong><strong>找到指定的</strong><strong>Item</strong></span></p>
<div class="cnblogs_Highlighter">
<pre class="brush:delphi;gutter:true;"><span style="font-size: 16px">curItem := lvRoomList.FindData(0, AData, True, False);:</span></pre>
</div>
<p align="left"><span style="font-size: 16px"><strong>示例5:在</strong><strong>vsReport</strong><strong>模式下第一列插入两个图标</strong></span></p>
<p align="left"><span style="font-size: 16px">SmallImages,StateImages分别关联一个TimageList对象,TimageList对象对象中存入所有要显示的图标,对与TlistView 的vsReport模式下的每一条记录TlistItem对象tItem,</span></p>
<p align="left"><span style="font-size: 16px">可分别通过 tItem.ImageIndex 和 tItem.StateIndex 来控制显示TimageList对象中的哪个图标,</span></p>
<p align="left"><span style="font-size: 16px">一般tItem.StateIndex显示的图标在前,tItem.ImageIndex显示的图标在后,</span></p>
<p align="left"><span style="font-size: 16px">若要判断单击事件是鼠标单击哪个图标的,可通过GetCursorPos(p);获得鼠标坐标后判断横坐标即P.X判断。</span></p>
<p align="left"><span style="font-size: 16px"> </span></p>
<p align="left"><span style="font-size: 12px; color: rgba(136, 136, 136, 1)"> 创建时间:2020.03.20 更新时间:</span></p>
<p align="left"> </p>
</div>
<div id="MySignature" role="contentinfo">
博客园 滔Roy https://www.cnblogs.com/guorongtao 希望内容对你有所帮助,谢谢!<br><br>
来源:https://www.cnblogs.com/guorongtao/p/12532289.html
頁:
[1]