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.