树操作的简便过程

  为了使繁杂的树操作变得简单,特此写了以下这个单元。为了节省时间,这个单元没有面向对象,而仅仅是通过过程来实现的,它可以被使用在任何版本的Delphi,从而完成简便的树操作
  1. unit TreeCtrls;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5.   Dialogs,ComCtrls;
  6. function NodeMoveUp(TreeNode: TTreeNode): boolean;
  7. function NodeMoveDown(TreeNode: TTreeNode): boolean;
  8. function NodeDelete(TreeNode:TTreeNode;Hint,Title:string;Form:TForm):boolean;
  9. function NodeAddLast(Tree:TTreeview;NodeName:string):boolean;
  10. function NodeAddFirst(Tree:TTreeview;NodeName:string):boolean;
  11. function NodeAddChildLast(Tree:TTreeview;NodeName:string):boolean;
  12. function NodeAddChildFirst(Tree:TTreeview;NodeName:string):boolean;
  13. function GetAllChild(TreeNode:TTreeNode;Item:TStrings):boolean;
  14. implementation
  15. //结点向上移
  16. function NodeMoveUp(TreeNode: TTreeNode): boolean;
  17. begin
  18.   if TreeNode=nil then
  19.   begin
  20.     result:=false;
  21.     exit;
  22.   end;
  23.   //如果已是最上面的结点
  24.   if TreeNode.getPrevSibling = nil then
  25.   begin
  26.     result := false;
  27.     exit;
  28.   end;
  29.   //如果上一个结点是父结点
  30.   if treenode.GetPrev=treenode.Parent then
  31.   begin
  32.     result:=false;
  33.     exit;
  34.   end;
  35.   //正常情况
  36.   treenode.MoveTo(treenode.getPrevSibling,nainsert);
  37.   result:=true;
  38. end;
  39. //结点向下移
  40. function NodeMoveDown(TreeNode: TTreeNode): boolean;
  41. var
  42.   TempNode:TTreeNode;
  43. begin
  44.   if TreeNode=nil then
  45.   begin
  46.     result:=false;
  47.     exit;
  48.   end;
  49.   //如果已是最后一个结点
  50.   if TreeNode.getNextSibling = nil then
  51.   begin
  52.     result := false;
  53.     exit;
  54.   end;
  55.   //如果是倒数第二个结点
  56.   if treenode.getNextSibling.getNextSibling=nil then
  57.   begin
  58.     TempNode:=treenode.getNextSibling;
  59.     NodeMoveUp(TempNode);
  60.     result:=true;
  61.     exit;
  62.   end;
  63.   //正常情况
  64.   Treenode.MoveTo(treenode.getNextSibling.getNextSibling,nainsert);
  65.   result:=true;
  66. end;
  67. //删除结点
  68. function NodeDelete(TreeNode:TTreeNode;Hint,Title:string;Form:TForm):boolean;
  69. var
  70.   Res:integer;
  71. begin
  72.   if TreeNode=nil then
  73.   begin
  74.     result:=false;
  75.     exit;
  76.   end;
  77.   //如果包含子结点
  78.   if treenode.HasChildren=true then
  79.   begin
  80.     messagebox(form.Handle,'该目录包含有子目录,不能删除','提示',MB_OK);
  81.     result:=false;
  82.     exit;
  83.   end;
  84.   RES:=messagebox(form.Handle,pchar(hint),pchar(title),MB_YESNO);
  85.   if Res=6 then
  86.   begin
  87.     treenode.Delete;
  88.     result:=true;
  89.   end
  90.   else
  91.   begin
  92.     result:=false;
  93.   end;
  94. end;
  95. //添加(父)同级结点到末尾
  96. function NodeAddLast(Tree:TTreeview;NodeName:string):boolean;
  97. begin
  98.   try
  99.     tree.Items.Add(tree.Selected,NodeName);
  100.   except
  101.     begin
  102.       result:=false;
  103.       exit;
  104.     end;
  105.   end;
  106.   result:=true;
  107. end;
  108. //添加(父)同级结点到首位
  109. function NodeAddFirst(Tree:TTreeview;NodeName:string):boolean;
  110. begin
  111.   try
  112.     tree.Items.AddFirst(tree.Selected,NodeName);
  113.   except
  114.     begin
  115.       result:=false;
  116.       exit;
  117.     end;
  118.   end;
  119.   result:=true;
  120. end;
  121. //添加(子)同级结点到末尾
  122. function NodeAddChildLast(Tree:TTreeview;NodeName:string):boolean;
  123. begin
  124.   try
  125.     tree.Items.AddChild(tree.Selected,NodeName);
  126.   except
  127.     begin
  128.       result:=false;
  129.       exit;
  130.     end;
  131.   end;
  132.   result:=true;
  133. end;
  134. //添加(子)同级结点到首位
  135. function NodeAddChildFirst(Tree:TTreeview;NodeName:string):boolean;
  136. begin
  137.   try
  138.     tree.Items.AddChildFirst(tree.Selected,NodeName);
  139.   except
  140.     begin
  141.       result:=false;
  142.       exit;
  143.     end;
  144.   end;
  145.   result:=true;
  146. end;
  147. //遍历所有子结点
  148. function GetAllChild(TreeNode:TTreeNode;Item:TStrings):boolean;
  149. var
  150.   ND:TTreeNode;
  151.   ChildNum:integer;
  152.   i:integer;
  153. begin
  154.   if TreeNode=nil then
  155.   begin
  156.     result:=false;
  157.     exit;
  158.   end;
  159.   if TreeNode.HasChildren=true then
  160.   begin
  161.     ChildNum:=treenode.Count;
  162.     ND:=treenode.getFirstChild;
  163.     for i:=1 to ChildNum do
  164.     begin
  165.       item.Add(nd.Text);
  166.       nd:=nd.getNextSibling;
  167.     end;
  168.     result:=true;
  169.   end
  170.   else
  171.     result:=false;
  172. end;
  173. end.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值