首先 Tlistview 是从文本文件里读入数据的
文本格式如下
类型 名称 金额
0 汽车 100
1 大汽车 100在窗体里加了2个按纽 如果类型是0 那么Tlistview 只ADD 汽车这个
如果 类型是1 那么 Tlistview 就ADD 大汽车 这个如果想修改 名称 把汽车修改成 小汽车 那么 Tlistview 保存 内容为 文本 就只保存了 小汽车这个 其他所有都没了 Tlistview 没有隐藏功能 我也想过用两个 Tlistview 一个是 分类的 一个隐藏 用来显示全部的
但是 得同步
请高人指点下 小弟没多少分 先给100分吧
文本格式如下
类型 名称 金额
0 汽车 100
1 大汽车 100在窗体里加了2个按纽 如果类型是0 那么Tlistview 只ADD 汽车这个
如果 类型是1 那么 Tlistview 就ADD 大汽车 这个如果想修改 名称 把汽车修改成 小汽车 那么 Tlistview 保存 内容为 文本 就只保存了 小汽车这个 其他所有都没了 Tlistview 没有隐藏功能 我也想过用两个 Tlistview 一个是 分类的 一个隐藏 用来显示全部的
但是 得同步
请高人指点下 小弟没多少分 先给100分吧
PCar = ^TCar;
TCar = packed record
Kind: Integer;
Name: String;
Price: Currency;
end;//加载文本文件到TListView的时候,文件的打开、读取与关闭操作略
//假设每一行的三个信息已读取到变量iKind, sName和cPrice中
var
Car: PCar;
begin
....
car := AllocMem(SizeOf(TCar));
car^.Kind := iKind;
car^.Name := sName;
car^.Price := cPrice;
Node.Data := Car;
....
end;//保存的操作正好和上面反过来,此处就不在赘述//修改的时候
///////
PCar(Node.Data)^.Name := '小汽车';
PCar(Node.Data)^.Price := 200;
.......
SysUtils;type
//每条数据的结构体,可以根据需要进行增删
pDataRec = ^TDataRec;
TDataRec = record
FType : integer; //类型
FName : string; //名称
FPrice: integer; //价格
end;var
g_DataLst: TList = nil;//下面是对这个列表进行管理的
procedure CreateLst;
begin
g_DataLst:= TList.Create;
end;procedure FreeLst;
var
m_iTmp: integer;
begin
if not Assigned(g_DataLst) then exit; for m_iTmp:= 0 to g_DataLst.Count - 1 do
begin
Dispose(pDataRec(g_DataLst.Item[m_iTmp]));
end; FreeAndNil(g_DataLst);
end;procedure AddData(AIndex: integer; AName: string; APrice: integer);
var
m_pData: pDataRec;
begin
if not Assigned(g_DataLst) then
g_DataLst:= TList.Create; //这里没有判断重复的纪录 new(m_pData);
with m_pData do
begin
FType := AIndex;
FName := AName;
FPrice:= APrice;
end; g_DataLst.Items.Add(@AData);
end;procedure DeleteData(AType: integer);
var
m_iTmp: integer;
begin
if not Assigned(g_DataLst) then exit; for m_iTmp:= 0 to g_DataLst.Count - 1 do
begin
if pDataRec(g_DataLst.Items[m_iTmp]).FType = AType then
begin
Dispose(pDataRec(g_DataLst.Items[m_iTmp]));
g_DataLst.Delete(m_iTmp);
exit;
end;
end;
end;--------------------------------------------
//显示某一种类型的数据
procedure TForm1.Button1Click(Sender: TObject);
var
m_iTmp: integer;
m_Item: TListItem;
begin
if not Assigned(g_DataLst) then exit; //清除原来所有的数据
ListView1.Items.Clear; //将类型为Button1.Tag的全部添加进来
for m_iTmp:= 0 to g_DataLst.Count - 1 do
begin
if (pDataRec(g_DataLst.Items[m_iTmp]).FType = Button1.Tag) then
begin
//在这里显示
m_Item:= ListView1.Items.Add;
m_Item.Caption:= IntToStr(pDataRec(g_DataLst.Items[m_iTmp]).FType);
m_Item.SubItems.Add(pDataRec(g_DataLst.Items[m_iTmp]).FName);
m_Item.Caption:= IntToStr(pDataRec(g_DataLst.Items[m_iTmp]).FPrice);
end;
end;
end;....
其他的不写了。