Delphi程序流程三(2)(while)PS:最简单的任务管理器( 组件LISTVIEW的用法 增加LISTVIEW的读取 删除)
unit Unit1; interface uses Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls; type TForm1 = class(TForm) btn1: TButton; ListView: TListView; btn2: TButton; btn3: TButton; procedure btn1Click(Sender: TObject); procedure btn2Click(Sender: TObject); procedure btn3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; //newitem:TListItem; //超级列表框一定要在这里申明 不知道为什么 //一个程序只用一次就可以了,放在按纽事件里有BUG 坑爹的 implementation type Snapshot32=record //记录类型的名称 A1:Integer; A2:Integer; A3:Integer; A4:Integer; A5:Integer; A6:Integer; A7:Integer; A8:Integer; A9:Integer; A10:array[0..259]of char; end; function CreateToolhelp32Snapshot(x,y: Integer): Integer; stdcall; external 'kernel32.dll' name 'CreateToolhelp32Snapshot'; function Process32Next(x:Integer;VAR y: Snapshot32): Integer; stdcall; external 'kernel32.dll' name 'Process32Next'; function Process32First(x:Integer;VAR y: Snapshot32): Integer; stdcall; external 'kernel32.dll' name 'Process32First'; function CloseHandle(x:Integer): Integer; stdcall; external 'kernel32.dll' name 'CloseHandle'; {$R *.dfm} procedure TForm1.btn1Click(Sender: TObject); var i,x:Integer; m:string; k:Snapshot32; newitem:TListItem; begin ListView.Clear; i:=CreateToolhelp32Snapshot(2,0); k.A1:=1024; x:=Process32First(i,k) ; while x<>0 do begin newitem:=Listview.Items.Add; //要在循环里放入这个 否则他一直加入的是第 //一行 理解的是 超级列表框添加一行 反回新的行数 下面是新行数的标题 和新 //行数的列添加 //循环后再一次添加新一行 ,返回新的行数………依次这样 //超级列表框增加列表项目为属性 Columns 这里设置 然后必须要把属性ViewStyle //设置为vsreport newitem.Caption:=k.A10; newitem.SubItems.Add(IntToStr(k.A3)); x:=Process32Next(i,k); end; CloseHandle(x); end; procedure TForm1.btn2Click(Sender: TObject); begin if (ListView.Items.count<>0)and (ListView.Selected<>nil) then //如果超级列表框总数不为0 且选中项不为空,如果不选中直接读项目值发生内存错误 begin ShowMessage(ListView.Selected.Caption); //返回选中行标题 ShowMessage(ListView.Selected.SubItems.Strings[0]); //返回选中行第二列中的值 //ShowMessage(ListView.Selected.SubItems.Strings[1]); //返回选中行第三列中的值 这里没有第三列 //listview.Items[i].SubItems.strings[n];//读i行第n列 ShowMessage(ListView.Items[1].SubItems.strings[0]); end; //ShowMessage(IntToStr(ListView.Items.count)); //超级列表框项目总数 //ShowMessage(ListView.Items[0].caption); //读第一行标题 //ShowMessage(ListView.Items[0].SubItems.strings[0]); //读1行第1列 end; procedure TForm1.btn3Click(Sender: TObject); var i:Integer; begin //按顺序删除 // if ListView.Items.count<>0 then //如果超级列表框总数不为0 // begin // ListView.Items[0].Delete(); //删除第一行 //end; //按选中项删除 // if (ListView.Items.count<>0)and (ListView.Selected<>nil) then // //如果超级列表框总数不为0 且选中项不为空 // begin // ListView.Selected.Delete(); //删除选中项 // end; //按标题删除 for i:=ListView.Items.Count-1 downto 0 Do begin if ListView.Items[i].Caption ='System' then begin ShowMessage('zhaodaole'); ListView.Items[i].Delete(); //删除当前选中行 end; end; end; end.