treeview的data属性是一个指针,当然,指针指向的位置可以存储你想存储的任何内容: 首先,得声明你的指针和你想要在节点存储的数据(如果有多个字段,可以用记录来处理); type ptr=^schar schar=record field1:string, field2:integer, ... end; 在加载树时你可以将你想要存储到节点的数据放进schar: var p:ptr .... new(p); p^.field1:='aaa';//在此可读入数据 p^.field2:=1; .... treeview.items.addchildobject(node,'',p); ... 这样,附加信息就写入了节点的data;如何读取呢: 下面是一段删除选中节点及子节点的代码(同时删除数据库中对应数据): procedure TForm1.detree(node: ttreenode); var tnode:ttreenode; i:integer; s1,s2:string; begin if node.HasChildren then begin for i:=node.Count-1 downto 0 do begin if node.Item[i].HasChildren then detree(node.Item[i]); s1:=pchar(node.Item[i].Data)^.mcaption; s2:=pchar(node.Item[i].data)^.tcaption; with form1.pub do begin close; sql.Clear; sql.Add('delete BOMMD where MD001=:AA and MD003=:BB'); parameters[0].Value:=s1; parameters[1].Value:=s2; ExecSQL; end; node.Item[i].Delete; end; end; node.Delete; end;
The following code defines a record type of TMyRec and a record pointer type of PMyRec.type PMyRec = ^TMyRec; TMyRec = record FName: string; LName: string; end;Assuming these types are used, the following code adds a node to TreeView1 as the last sibling of a specified node. A TMyRec record is associated with the added item. The FName and LName fields are obtained from edit boxes Edit1 and Edit2. The Index parameter is obtained from edit box Edit3. The item is added only if the Index is a valid value.procedure TForm1.Button1Click(Sender: TObject);var MyRecPtr: PMyRec; TreeViewIndex: LongInt; begin New(MyRecPtr); MyRecPtr^.FName := Edit1.Text; MyRecPtr^.LName := Edit2.Text; TreeViewIndex := StrToInt(Edit3.Text); with TreeView1 do begin if Items.Count = 0 then Items.AddObject(nil, 'Item' + IntToStr(TreeViewIndex), MyRecPtr) else if (TreeViewIndex < Items.Count) and (TreeViewIndex >= 0) then Items.AddObject(Items[TreeViewIndex], 'Item' + IntToStr(TreeViewIndex), MyRecPtr); end; end;After an item containing a TMyRec record has been added, the following code retrieves the FName and LName values associated with the item and displays the values in a label.procedure TForm1.Button2Click(Sender: TObject);begin Label1.Caption := PMyRec(TreeView1.Selected.Data)^.FName + ' ' + PMyRec(TreeView1.Selected.Data)^.LName; end;
PMyTree=^TMyTree;
TMyTree =Record
OldText:string;
NewText:String;
endvar
root :TTreeNode;New(p);
p^.OldText :='bbbb';
p^.NewText :='aaaa';
Root := AddChild(Root,p^.OldText);
Root.Data :=p;
首先,得声明你的指针和你想要在节点存储的数据(如果有多个字段,可以用记录来处理);
type
ptr=^schar
schar=record
field1:string,
field2:integer,
...
end;
在加载树时你可以将你想要存储到节点的数据放进schar:
var
p:ptr
....
new(p);
p^.field1:='aaa';//在此可读入数据
p^.field2:=1;
....
treeview.items.addchildobject(node,'',p);
...
这样,附加信息就写入了节点的data;如何读取呢:
下面是一段删除选中节点及子节点的代码(同时删除数据库中对应数据):
procedure TForm1.detree(node: ttreenode);
var
tnode:ttreenode;
i:integer;
s1,s2:string;
begin
if node.HasChildren then
begin
for i:=node.Count-1 downto 0 do
begin
if node.Item[i].HasChildren then
detree(node.Item[i]);
s1:=pchar(node.Item[i].Data)^.mcaption;
s2:=pchar(node.Item[i].data)^.tcaption;
with form1.pub do
begin
close;
sql.Clear;
sql.Add('delete BOMMD where MD001=:AA and MD003=:BB');
parameters[0].Value:=s1;
parameters[1].Value:=s2;
ExecSQL;
end;
node.Item[i].Delete;
end;
end;
node.Delete;
end;
s1:=pchar(node.Item[i].Data)^.mcaption;
s2:=pchar(node.Item[i].data)^.tcaption;
这两句读取Data属性存储的附加数据,这里申明的指针及记录与前面不一样。
PMyRec = ^TMyRec;
TMyRec = record
FName: string;
LName: string;
end;Assuming these types are used, the following code adds a node to TreeView1 as the last sibling of a specified node. A TMyRec record is associated with the added item. The FName and LName fields are obtained from edit boxes Edit1 and Edit2. The Index parameter is obtained from edit box Edit3. The item is added only if the Index is a valid value.procedure TForm1.Button1Click(Sender: TObject);var
MyRecPtr: PMyRec;
TreeViewIndex: LongInt;
begin
New(MyRecPtr);
MyRecPtr^.FName := Edit1.Text;
MyRecPtr^.LName := Edit2.Text;
TreeViewIndex := StrToInt(Edit3.Text);
with TreeView1 do
begin
if Items.Count = 0 then
Items.AddObject(nil, 'Item' + IntToStr(TreeViewIndex), MyRecPtr)
else if (TreeViewIndex < Items.Count) and (TreeViewIndex >= 0) then Items.AddObject(Items[TreeViewIndex], 'Item' + IntToStr(TreeViewIndex), MyRecPtr);
end;
end;After an item containing a TMyRec record has been added, the following code retrieves the FName and LName values associated with the item and displays the values in a label.procedure TForm1.Button2Click(Sender: TObject);begin
Label1.Caption := PMyRec(TreeView1.Selected.Data)^.FName + ' ' +
PMyRec(TreeView1.Selected.Data)^.LName;
end;