饥荒中庭boss怎么召唤:delphi treeview节点移动函数
来源:百度文库 编辑:偶看新闻 时间:2024/03/29 15:58:39
//TreeView节点移动函数,支撑同级移动跟任意移动。up代表移动方向,true上移false下移;
//同级移动的时候须要传进选中节点的level,免意挪动level=-1
procedure UpDownNode(node:TTreeNode;up:boolean;level:integer);
var TargetNode: TTreeNode;
begin
if (level<>-1) then //同级间移动
begin
if (node <>nil)then //检查是否有选中节点 如果有则做上移操作
begin
if (up) then //上移
begin
if (node.GetPrev <> nil) then
begin
TargetNode := node.GetPrev;
while TargetNode.Level <> level do
begin
if TargetNode.GetPrev=nil then
break
else
TargetNode := TargetNode.GetPrev;
end;
if (TargetNode<>nil) then
begin
if (TargetNode.Level=level) then
begin
if (node.getPrevSibling <> nil) then //检查是否有同级上一节点如果有做上移操作
begin
if (node.getPrevSibling <> nil) then
node.MoveTo(TargetNode,naInsert)
else
node.MoveTo(TargetNode,naAddFirst);
end else
begin
node.MoveTo(TargetNode,naAdd);
end;
end;
end;
end;
end else //下移
begin
if (node.GetNext <> nil) then
begin
TargetNode := node.getNext;
while TargetNode.Level <> level do
begin
if TargetNode.GetNext=nil then
break
else
TargetNode := TargetNode.getNext;
end;
if (TargetNode<>nil) then
begin
if (TargetNode.Level=level) then
begin
if (node.getNextSibling <> nil) then //检讨是否有同级上一节点假如有作上移操作
begin
if (TargetNode.getNextSibling <> nil) then
node.MoveTo(TargetNode.getNextSibling,naInsert)
else
node.MoveTo(TargetNode,naAdd);
end else
begin
node.MoveTo(TargetNode,naInsert);
end;
end;
end;
end;
end;
end;
end else //容许跨级移动
begin
if (node <> nil)then //检讨是否有选中节点 假如有则做上移操作
begin
if (up) then //上移
begin
if (node.GetPrev <> nil) then
begin
TargetNode := node.GetPrev;
if (TargetNode<>nil) then
begin
if (node.GetPrev <> nil) then //检查是否有同级上一节点如果有做上移操作
begin
if (node.GetPrev <> nil) then
node.MoveTo(TargetNode,naInsert)
else
node.MoveTo(TargetNode,naAddFirst);
end else
begin
node.MoveTo(TargetNode,naAdd);
end;
end;
end;
end else //下移
begin
if (node.GetNext <> nil) then
begin
TargetNode := node.GetNext;
while TargetNode.Parent = node do
begin
if TargetNode.GetNext=nil then
break
else
TargetNode := TargetNode.getNext;
end;
if (TargetNode<>nil) then
begin
if (node.GetNext <> nil) then //检讨是否有共级上一节点假如有干上移操息
begin
if (TargetNode.getNext <> nil) then
node.MoveTo(TargetNode.getNext,naInsert)
else
node.MoveTo(TargetNode,naAdd);
end else
begin
node.MoveTo(TargetNode,naAdd);
end;
end;
end;
end;
end;
end;
end;