a/b/c/e/f
a/e/f
a/b/x
a/b/x/w
a/b/x/m
b/x/e/m
a/v/x
完整代码:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
type
PN = ^TN;
TN = record
level: integer;
Sname: String;
Pname: String;
end;
type
TForm1 = class(TForm)
TreeView1: TTreeView;
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
FN : PN;
FN1 : PN;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i,j,k: integer;
s,s1: TStringList;
ls: TList;
Node1,Node2: TTreeNode;
ifadd: boolean;
begin
s := TStringList.Create;
s1 := TStringList.Create;
ls := Tlist.Create;
try
s.LoadFromFile('c:/aa.txt');
for i:=0 to s.Count-1 do
begin
s1.Delimiter := '/';
s1.DelimitedText := s[i];
for j:=0 to s1.Count-1 do
begin
//memo1.Lines.Add(s1[j]);
new(FN);
FN.level := j;
FN.Sname := s1[j];
if j>0 then
FN.Pname := s1[j-1]
else
FN.Pname := '';
ls.Add(FN);
end;
//memo1.Lines.Add('---------------------');
end;
//现在开始加载数据到treeview中
for i:=0 to ls.Count-1 do
begin
new(FN);
FN := ls[i];
ifadd := true;
if (FN.level=0) or (FN.Pname='') then
begin
if TreeView1.Items.Count<=0 then
begin
TreeView1.Items.AddChild(nil,FN.Sname);
end else
begin
for j:=0 to TreeView1.Items.Count-1 do
begin
if (FN.level = 0) and (FN.Sname=TreeView1.Items[j].text) then break;
Node2 := TreeView1.Items.AddChild(nil,FN.Sname);
Node2.Data := FN;
end;
end;
end else
begin
for j:=0 to TreeView1.Items.Count-1 do
begin
Node1 := TreeView1.Items[j];
if FN.level = TreeView1.Items[j].Level+1 then
begin
if FN.Pname = TreeView1.Items[j].Text then
begin
//开始取其子节点
if TreeView1.Items[j].Count>0 then
begin
for k:= 0 to TreeView1.Items[j].Count-1 do
begin
Node2 := TreeView1.Items[j].Item[k];
FN1 := Node2.Data;
if FN1.Sname=FN.Sname then
begin
ifadd := false;
break;
end;
end;
if ifadd then
begin
Node2 := TreeView1.Items.AddChild(Node1,FN.Sname);
Node2.Data := FN;
end;
end else
begin
Node2 := TreeView1.Items.AddChild(Node1,FN.Sname);
Node2.Data := FN;
break;
end;
end;
end;
end;
end;
end;
finally
s.Free;
s1.Free;
ls.Free;
end;
end;
end.
a/e/f
a/b/x
a/b/x/w
a/b/x/m
b/x/e/m
a/v/x
完整代码:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
type
PN = ^TN;
TN = record
level: integer;
Sname: String;
Pname: String;
end;
type
TForm1 = class(TForm)
TreeView1: TTreeView;
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
FN : PN;
FN1 : PN;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i,j,k: integer;
s,s1: TStringList;
ls: TList;
Node1,Node2: TTreeNode;
ifadd: boolean;
begin
s := TStringList.Create;
s1 := TStringList.Create;
ls := Tlist.Create;
try
s.LoadFromFile('c:/aa.txt');
for i:=0 to s.Count-1 do
begin
s1.Delimiter := '/';
s1.DelimitedText := s[i];
for j:=0 to s1.Count-1 do
begin
//memo1.Lines.Add(s1[j]);
new(FN);
FN.level := j;
FN.Sname := s1[j];
if j>0 then
FN.Pname := s1[j-1]
else
FN.Pname := '';
ls.Add(FN);
end;
//memo1.Lines.Add('---------------------');
end;
//现在开始加载数据到treeview中
for i:=0 to ls.Count-1 do
begin
new(FN);
FN := ls[i];
ifadd := true;
if (FN.level=0) or (FN.Pname='') then
begin
if TreeView1.Items.Count<=0 then
begin
TreeView1.Items.AddChild(nil,FN.Sname);
end else
begin
for j:=0 to TreeView1.Items.Count-1 do
begin
if (FN.level = 0) and (FN.Sname=TreeView1.Items[j].text) then break;
Node2 := TreeView1.Items.AddChild(nil,FN.Sname);
Node2.Data := FN;
end;
end;
end else
begin
for j:=0 to TreeView1.Items.Count-1 do
begin
Node1 := TreeView1.Items[j];
if FN.level = TreeView1.Items[j].Level+1 then
begin
if FN.Pname = TreeView1.Items[j].Text then
begin
//开始取其子节点
if TreeView1.Items[j].Count>0 then
begin
for k:= 0 to TreeView1.Items[j].Count-1 do
begin
Node2 := TreeView1.Items[j].Item[k];
FN1 := Node2.Data;
if FN1.Sname=FN.Sname then
begin
ifadd := false;
break;
end;
end;
if ifadd then
begin
Node2 := TreeView1.Items.AddChild(Node1,FN.Sname);
Node2.Data := FN;
end;
end else
begin
Node2 := TreeView1.Items.AddChild(Node1,FN.Sname);
Node2.Data := FN;
break;
end;
end;
end;
end;
end;
end;
finally
s.Free;
s1.Free;
ls.Free;
end;
end;
end.