本文整理自网络,侵删。
Delphi ListView基本用法大全
//增加项或列(字段)
ListView1.Clear;ListView1.Columns.Clear;ListView1.Columns.Add;ListView1.Columns.Add;ListView1.Columns.Add;ListView1.Columns.Items[0].Caption:='id';ListView1.Columns.Items[1].Caption:='type';ListView1.Columns.Items[2].Caption:='title';ListView1.Columns.Items[2].Width:=300;Listview1.ViewStyle:=vsreport;Listview1.GridLines:=true; //注:此处代码也可以直接在可视化编辑器中完成,
也可写成以下这样
beginwith listview1 dobeginColumns.Add;Columns.Add;Columns.Add;ViewStyle:=vsreport;GridLines:=true;columns.items[0].caption:='进程名';columns.items[1].caption:='进程ID';columns.items[2].caption:='进程文件路径';Columns.Items[0].Width:=100;Columns.Items[1].Width:=100;Columns.Items[2].Width:=150;endend;
//增加记录with listview1.items.add do begin caption:='1212'; subitems.add('hh1'); subitems.add('hh2'); end;
//删除 listview1.items.delete(0);
//从数据库表里读取数据写入Listview
varTitem:Tlistitem; //此处一定要预定义临时记录存储变量.beginListView1.Items.Clear;with adoquery1 dobeginclose;sql.Clear;sql.Add('select spmc,jg,sl from kcxs');Open;ListView1.Items.Clear;while not eof dobeginTitem:=ListView1.Items.add;Titem.Caption:=FieldByName('spmc').Value;Titem.SubItems.Add(FieldByName('sl').Value);Titem.SubItems.Add(FieldByName('jg').Value);next;end;
//删除 ListView1.DeleteSelected;
//如何取得ListView中选中行的某一列的值
procedure TForm1.Button2Click(Sender: TObject);beginShowMessage(ListView1.Selected.SubItems.Strings[1]); //返回选中行第三列中的值end;
showMessage(listView1.Selected.Caption); //返回选中行第一列的值.
第1列的值: -->>> ListView1.Selected.Caption 第i列的值(i>1):-->>> ListView1.Selected.SubItems.Strings[i]
ListView1.Items.Item[1].SubItems.GetText); //取得listview某行某列的值
Edit2.Text := listview1.Items[i].SubItems.strings[0]; //读第i行第2列
返回选中行所有子列值.是以回车符分开的,你还要从中剥离出来你要的子列的值。
showMessage(ListView1.Selected.SubItems.GetText);
ListView 简单排序的实现
ListView 排序
怎样实现单击一下按升序,再单击一下按降序。function CustomSortProc(Item1, Item2: TListItem; ColumnIndex: integer): integer; stdcall;beginif ColumnIndex = 0 thenResult := CompareText(Item1.Caption,Item2.Caption)elseResult := CompareText(Item1.SubItems[ColumnIndex-1],Item2.SubItems[ColumnIndex-1])end;
procedure TFrmSrvrMain.ListView1ColumnClick(Sender: TObject;Column: TListColumn);beginListView1.CustomSort(@CustomSortProc,Column.Index);end;
===============================================================
//增加 i := ListView1.Items.Count; with ListView1 do begin ListItem:=Items.Add; ListItem.Caption:= IntToStr(i); ListItem.SubItems.Add('第 '+IntToStr(i)+' 行'); ListItem.SubItems.Add('第三列内容'); end;
//按标题删除 for i:=ListView1.Items.Count-1 downto 0 Do if ListView1.Items[i].Caption = Edit1.Text then begin ListView1.Items.Item[i].Delete(); //删除当前选中行 end;
//选中一行 if ListView1.Selected <> nil then Edit1.Text := ListView1.Selected.Caption;
// listview1.Items[Listview1.Items.Count -1].Selected := True; // listview1.Items[Listview1.Items.Count -1].MakeVisible(True); procedure TForm1.Button2Click(Sender: TObject); // 选择第一条 begin listview1.SetFocus; listview1.Items[0].Selected := True; end;
procedure TForm1.Button1Click(Sender: TObject); // 选择最后一条 begin listview1.SetFocus; listview1.Items[Listview1.Items.Count -1].Selected := True; 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);//下移
TListView组件使用方法
引用CommCtrl单元
procedure TForm1.Button1Click(Sender: TObject); begin ListView_DeleteColumn(MyListView.Handle, i);//i是要删除的列的序号,从0开始
end;
用LISTVIEW显示表中的信息: procedure viewchange(listv:tlistview;table:tcustomadodataset;var i:integer); begin tlistview(listv).Items.BeginUpdate; {listv:listview名} try tlistview(listv).Items.Clear; with table do {table or query名} begin active:=true; first; while not eof do begin listitem:=tlistview(listv).Items.add; listitem.Caption:=trim(table.fields[i].asstring); // listitem.ImageIndex:=8; next; end; end; finally tlistview(listv).Items.EndUpdate; end; end;
ListView使用中的一些要点。以下以一个两列的ListView为例。 →增加一行: with ListView1 do begin ListItem:=Items.Add; ListItem.Caption:='第一列内容'; ListItem.SubItems.Add('第二列内容'); end; →清空ListView1: ListView1.Items.Clear; →得到当前被选中行的行的行号以及删除当前行: For i:=0 to ListView1.Items.Count-1 Do If ListView1.Items[i].Selected then //i=ListView1.Selected.index begin ListView1.Items.Delete(i); //删除当前选中行 end; 当然,ListView有OnSelectItem事件,可以判断选择了哪行,用个全局变量把它赋值出来。 →读某行某列的操作: 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列 以次类推,可以用循环读出整列。 →将焦点上移一行: For i:=0 to ListView1.Items.Count-1 Do If (ListView1.Items[i].Selected) and (i>0) then begin ListView1.SetFocus; ListView1.Items.Item[i-1].Selected := True; end; 不过在Delphi6中,ListView多了一个ItemIndex属性,所以只要 ListView1.SetFocus; ListView1.ItemIndex:=3; 就能设定焦点了。
Delphi的listview能实现交替颜色么? procedure TForm1.ListView1CustomDrawItem( Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); var i: integer; begin i:= (Sender as TListView).Items.IndexOf(Item); if odd(i) then sender.Canvas.Brush.Color:= $02E0F0D7 else sender.Canvas.Brush.Color:= $02F0EED7; Sender.Canvas.FillRect(Item.DisplayRect(drIcon)); end;
要想随时更改ListView 中某一行的字体颜色,要在ListView的 OnCustomDrawItem 的事件中书写相关的代码。例如 我想更改选中的某行字体的颜色,则需要在事件中写入下的代码:
if item.Index = strtoint(edit1.Text) then //该条件是用于判断是否符合更改字体颜色的行的条件。 Sender.Canvas.Font.Color := clred;
unit Unit1;
interface
uses System.Classes, System.SysUtils, Vcl.Forms, Vcl.ComCtrls, Vcl.StdCtrls, Vcl.Menus, Vcl.ExtCtrls, Vcl.Controls, UnitEditableListView;
type
TForm1 = class(TForm) ListView1: TListView; PopupMenu1: TPopupMenu; Edit1: TMenuItem; Remove1: TMenuItem; Create1: TMenuItem; N1: TMenuItem; Panel1: TPanel; LabelTitle: TLabel; ComboBox1: TComboBox; procedure FormCreate(Sender: TObject); procedure Edit1Click(Sender: TObject); procedure Remove1Click(Sender: TObject); procedure Create1Click(Sender: TObject); procedure ListView1Edited(Sender: TObject; Item: TListItem; var S: string); procedure ListView1Editing(Sender: TObject; Item: TListItem; var AllowEdit: Boolean); procedure Button1Click(Sender: TObject); procedure ComboBox1Change(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
uses Winapi.Windows;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);begin ListView1.Parent := nil; ListView1.Parent := Self;end;
procedure TForm1.ComboBox1Change(Sender: TObject);begin ListView1.ViewStyle := TViewStyle(ComboBox1.ItemIndex);end;
procedure TForm1.Create1Click(Sender: TObject);var Item: TListItem;begin Item := ListView1.Items.Add; Item.Caption := 'a'; Item.SubItems.Add('b'); Item.SubItems.Add('c'); Item.SubItems.Add('d'); Item.SubItems.Add('e');
Item.Selected := true;
ListView1.Scroll(0, ListView1.Selected.Top - (ListView1.Height div 2));
end;
procedure TForm1.Edit1Click(Sender: TObject);begin if ListView1.SelCount = 0 then Exit;
ListView1.EditCaptionAt(ListView1.ScreenToClient(PopupMenu1.PopupPoint));end;
procedure TForm1.FormCreate(Sender: TObject);var I: Integer; Item: TListItem;begin
for I := 0 to 50 do begin Item := ListView1.Items.Add; Item.Caption := Format('%d.%d', [I, 1]); Item.SubItems.Add(Format('%d.%d', [I, 2])); Item.SubItems.Add(Format('%d.%d', [I, 3])); Item.SubItems.Add(Format('%d.%d', [I, 4])); Item.SubItems.Add(Format('%d.%d', [I, 5])); end;
end;
procedure TForm1.ListView1Edited(Sender: TObject; Item: TListItem; var S: string);begin if Application.MessageBox('Var "S" only take effect on caption', 'Override caption? ', MB_YESNO) = IDYES then S := 'Override!';end;
procedure TForm1.ListView1Editing(Sender: TObject; Item: TListItem; var AllowEdit: Boolean);begin AllowEdit := Application.MessageBox(PChar(Item.Caption), 'Can edit?', MB_YESNO) = IDYES;end;
procedure TForm1.Remove1Click(Sender: TObject);begin if ListView1.SelCount = 0 then Exit;
ListView1.Selected.Delete;end;
end.
相关阅读 >>
Delphi 采用 tidhttp 访问 https 的网站,采用 tidtcpclient 访问 https 的网站
github上通过星级评估排名前10的最受欢迎的开源Delphi项目
Delphi xe mysql数据库操作类 mysqlhelper
更多相关阅读请进入《Delphi》频道 >>