Delphi界面篇之ListView控件
<p>//增加项或列(字段)</p><p>ListView1.Clear;<br>ListView1.Columns.Clear;<br>ListView1.Columns.Add;<br>ListView1.Columns.Add;<br>ListView1.Columns.Add;<br>ListView1.Columns.Items.Caption:='id';<br>ListView1.Columns.Items.Caption:='type';<br>ListView1.Columns.Items.Caption:='title';<br>ListView1.Columns.Items.Width:=300;<br>Listview1.ViewStyle:=vsreport;<br>Listview1.GridLines:=true; //注:此处代码也可以直接在可视化编辑器中完成,</p>
<p>也可写成以下这样</p>
<p>begin<br>with listview1 do<br>begin<br>Columns.Add;<br>Columns.Add;<br>Columns.Add;<br>ViewStyle:=vsreport;<br>GridLines:=true;<br>columns.items.caption:='进程名';<br>columns.items.caption:='进程ID';<br>columns.items.caption:='进程文件路径';<br>Columns.Items.Width:=100;<br>Columns.Items.Width:=100;<br>Columns.Items.Width:=150;<br>end<br>end;</p>
<p>//增加记录<br>with listview1.items.add do <br>begin <br>caption:='1212'; <br>subitems.add('hh1'); <br>subitems.add('hh2'); <br>end; </p>
<p>//删除 <br>listview1.items.delete(0);</p>
<p>//从数据库表里读取数据写入Listview</p>
<p>var<br>Titem:Tlistitem; //此处一定要预定义临时记录存储变量.<br>begin<br>ListView1.Items.Clear;<br>with adoquery1 do<br>begin<br>close;<br>sql.Clear;<br>sql.Add('select spmc,jg,sl from kcxs');<br>Open;<br>ListView1.Items.Clear;<br>while not eof do<br>begin<br>Titem:=ListView1.Items.add;<br>Titem.Caption:=FieldByName('spmc').Value;<br>Titem.SubItems.Add(FieldByName('sl').Value);<br>Titem.SubItems.Add(FieldByName('jg').Value);<br>next;<br>end;</p>
<p>//删除 <br>ListView1.DeleteSelected;</p>
<p>//如何取得ListView中选中行的某一列的值</p>
<p>procedure TForm1.Button2Click(Sender: TObject);<br>begin<br>ShowMessage(ListView1.Selected.SubItems.Strings); //返回选中行第三列中的值<br>end;</p>
<p>showMessage(listView1.Selected.Caption); //返回选中行第一列的值.</p>
<p>第1列的值: -->>> ListView1.Selected.Caption <br>第i列的值(i>1):-->>> ListView1.Selected.SubItems.Strings</p>
<p>ListView1.Items.Item.SubItems.GetText); //取得listview某行某列的值</p>
<p>Edit2.Text := listview1.Items.SubItems.strings; //读第i行第2列</p>
<p>返回选中行所有子列值.是以回车符分开的,你还要从中剥离出来你要的子列的值。</p>
<p>showMessage(ListView1.Selected.SubItems.GetText); </p>
<p>ListView 简单排序的实现</p>
<p>ListView 排序</p>
<p><br>怎样实现单击一下按升序,再单击一下按降序。<br>function CustomSortProc(Item1, Item2: TListItem; ColumnIndex: integer): integer; stdcall;<br>begin<br>if ColumnIndex = 0 then<br>Result := CompareText(Item1.Caption,Item2.Caption)<br>else<br>Result := CompareText(Item1.SubItems,Item2.SubItems)<br>end; </p>
<p>procedure TFrmSrvrMain.ListView1ColumnClick(Sender: TObject;<br>Column: TListColumn);<br>begin<br>ListView1.CustomSort(@CustomSortProc,Column.Index);<br>end;</p>
<p><br>===============================================================</p>
<p>//增加 <br>i := ListView1.Items.Count; <br>with ListView1 do <br>begin <br>ListItem:=Items.Add; <br>ListItem.Caption:= IntToStr(i); <br>ListItem.SubItems.Add('第 '+IntToStr(i)+' 行'); <br>ListItem.SubItems.Add('第三列内容'); <br>end; </p>
<p>//按标题删除 <br>for i:=ListView1.Items.Count-1 downto 0 Do <br>if ListView1.Items.Caption = Edit1.Text then <br>begin <br>ListView1.Items.Item.Delete(); //删除当前选中行 <br>end; </p>
<p>//选中一行 <br>if ListView1.Selected <> nil then <br>Edit1.Text := ListView1.Selected.Caption; </p>
<p><br>// listview1.Items.Selected := True; <br>// listview1.Items.MakeVisible(True); <br>procedure TForm1.Button2Click(Sender: TObject); // 选择第一条 <br>begin <br>listview1.SetFocus; <br>listview1.Items.Selected := True; <br>end; </p>
<p>procedure TForm1.Button1Click(Sender: TObject); // 选择最后一条 <br>begin <br>listview1.SetFocus; <br>listview1.Items.Selected := True; <br>end; </p>
<p>//这是个通用的过程 <br>procedure ListViewItemMoveUpDown(lv : TListView; Item : TListItem; MoveUp, SetFocus : Boolean); <br>var <br>DestItem : TListItem; <br>begin <br>if (Item = nil) or <br>((Item.Index - 1 < 0) and MoveUp) or <br>((Item.Index + 1 >= lv.Items.Count) and (not MoveUp)) <br>then Exit; <br>lv.Items.BeginUpdate; <br>try <br>if MoveUp then <br>DestItem := lv.Items.Insert(Item.Index - 1) <br>else <br>DestItem := lv.Items.Insert(Item.Index + 2); <br>DestItem.Assign(Item); <br>lv.Selected := DestItem; <br>Item.Free; <br>finally <br>lv.Items.EndUpdate; <br>end; <br>if SetFocus then lv.SetFocus; <br>DestItem.MakeVisible(False); <br>end; </p>
<p>//此为调用过程,可以任意指定要移动的Item,下面是当前(Selected)Item <br>ListViewItemMoveUpDown(ListView1, ListView1.Selected, True, True);//上移 <br>ListViewItemMoveUpDown(ListView1, ListView1.Selected, False, True);//下移 </p>
<p><br>TListView组件使用方法 </p>
<p>引用CommCtrl单元 </p>
<p>procedure TForm1.Button1Click(Sender: TObject); <br>begin <br>ListView_DeleteColumn(MyListView.Handle, i);//i是要删除的列的序号,从0开始 </p>
<p>end; </p>
<p>用LISTVIEW显示表中的信息: <br>procedure viewchange(listv:tlistview;table:tcustomadodataset;var i:integer); <br>begin <br>tlistview(listv).Items.BeginUpdate; {listv:listview名} <br>try <br>tlistview(listv).Items.Clear; <br>with table do {table or query名} <br>begin <br>active:=true; <br>first; <br>while not eof do <br>begin <br>listitem:=tlistview(listv).Items.add; <br>listitem.Caption:=trim(table.fields.asstring); <br>// listitem.ImageIndex:=8; <br>next; <br>end; <br>end; <br>finally <br>tlistview(listv).Items.EndUpdate; <br>end; <br>end; </p>
<p> </p>
<p>ListView使用中的一些要点。以下以一个两列的ListView为例。 <br>→增加一行: <br>with ListView1 do <br>begin <br>ListItem:=Items.Add; <br>ListItem.Caption:='第一列内容'; <br>ListItem.SubItems.Add('第二列内容'); <br>end; <br>→清空ListView1: <br>ListView1.Items.Clear; <br>→得到当前被选中行的行的行号以及删除当前行: <br>For i:=0 to ListView1.Items.Count-1 Do <br>If ListView1.Items.Selected then //i=ListView1.Selected.index <br>begin <br>ListView1.Items.Delete(i); //删除当前选中行 <br>end; <br>当然,ListView有OnSelectItem事件,可以判断选择了哪行,用个全局变量把它赋值出来。 <br>→读某行某列的操作: <br>Edit1.Text := listview1.Items.Caption; //读第i行第1列 <br>Edit2.Text := listview1.Items.SubItems.strings; //读第i行第2列 <br>Edit3.Text := listview1.Items.SubItems.strings; //读第i行第3列 <br>以次类推,可以用循环读出整列。 <br>→将焦点上移一行: <br>For i:=0 to ListView1.Items.Count-1 Do <br>If (ListView1.Items.Selected) and (i>0) then <br>begin <br>ListView1.SetFocus; <br>ListView1.Items.Item.Selected := True; <br>end; <br>不过在Delphi6中,ListView多了一个ItemIndex属性,所以只要 <br>ListView1.SetFocus; <br>ListView1.ItemIndex:=3; <br>就能设定焦点了。 </p>
<p><br>Delphi的listview能实现交替颜色么? <br>procedure TForm1.ListView1CustomDrawItem( <br>Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; <br>var DefaultDraw: Boolean); <br>var <br>i: integer; <br>begin <br>i:= (Sender as TListView).Items.IndexOf(Item); <br>if odd(i) then sender.Canvas.Brush.Color:= $02E0F0D7 <br>else sender.Canvas.Brush.Color:= $02F0EED7; <br>Sender.Canvas.FillRect(Item.DisplayRect(drIcon)); <br>end;<br> </p>
<p><br>要想随时更改ListView 中某一行的字体颜色,要在ListView的 OnCustomDrawItem 的事件中书写相关的代码。例如 我想更改选中的某行字体的颜色,则需要在事件中写入下的代码:</p>
<p>if item.Index = strtoint(edit1.Text) then //该条件是用于判断是否符合更改字体颜色的行的条件。<br> Sender.Canvas.Font.Color := clred;</p>
<pre>ViewStyle := vsReport;
GridLines := True;</pre>
</div>
<div id="MySignature" role="contentinfo">
好的代码像粥一样,都是用时间熬出来的<br><br>
来源:https://www.cnblogs.com/jijm123/p/14110675.html
頁:
[1]