uses
Windows, SysUtils, Classes,StdCtrls, ComCtrls;
const
createToChild=1;
createToAboveBrother=2;
createToUnderBrother=3;
{ 複製樹(含子節點)
輸入參數
DestTree 複製目的地TTreeView控制項
SourceNode 複製源
DestNode 複製目的地
CreateStyle 複製類型
createToChild 產生複製目的地的子節點
createToAboveBrother 產生複製目的地的上面兄弟節點
createToUnderBrother 產生複製目的地的下面兄弟節點
}
procedure CopyTree(DestTree:TTreeView;SourceNode,DestNode:TTreeNode;CreateStyle:Byte);
procedure AddSubTree(DestTree:TTreeView;SourceNode,DestNode:TTreeNode;AddState:Boolean);
var
TempNode:TTreeNode;
I:integer;
begin
TempNode:=DestNode;
with DestTree do
begin
if Not(AddState) then TempNode:=Items.AddChild(DestNode,SourceNode.Text);
if SourceNode.HasChildren then
begin
for I:=0 to SourceNode.Count-1 do
begin
if I>0 then
TempNode:=Items.AddChild(TempNode.Parent,SourceNode.Item[I].Text)
else
TempNode:=Items.AddChild(TempNode,SourceNode.Item[I].Text);
AddSubTree(DestTree,SourceNode.Item[I],TempNode,True);
end;
end;
end;
end;
var
TempNode,TempNode2:TTreeNode;
begin
if SourceNode=nil then Exit;
if CreateStyle=createToChild then
AddSubTree(DestTree,SourceNode,DestNode,False);
if CreateStyle=createToAboveBrother then
begin
TempNode:=DestTree.Items.Insert(DestNode,SourceNode.Text);
AddSubTree(DestTree,SourceNode,TempNode,True);
end;
if CreateStyle=createToUnderBrother then
begin
TempNode2:=DestNode.Parent;
TempNode:=TempNode2.GetNextChild(DestNode);
if TempNode<>nil then
TempNode:=DestTree.Items.Insert(TempNode,SourceNode.Text)
else
TempNode:=DestTree.Items.AddChild(TempNode2,SourceNode.Text);
AddSubTree(DestTree,SourceNode,TempNode,True);
end;
end;