📄 treectrls.pas
字号:
unit TreeCtrls;//树操作的简便过程
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ComCtrls;
function NodeMoveUp(TreeNode: TTreeNode): boolean;
function NodeMoveDown(TreeNode: TTreeNode): boolean;
function NodeDelete(TreeNode:TTreeNode;Hint,Title:string;Form:TForm):boolean;
function NodeAddLast(Tree:TTreeview;NodeName:string):boolean;
function NodeAddFirst(Tree:TTreeview;NodeName:string):boolean;
function NodeAddChildLast(Tree:TTreeview;NodeName:string):boolean;
function NodeAddChildFirst(Tree:TTreeview;NodeName:string):boolean;
function GetAllChild(TreeNode:TTreeNode;Item:TStrings):boolean;
implementation
//结点向上移
function NodeMoveUp(TreeNode: TTreeNode): boolean;
begin
if TreeNode=nil then
begin
result:=false;
exit;
end;
//如果已是最上面的结点
if TreeNode.getPrevSibling = nil then
begin
result := false;
exit;
end;
//如果上一个结点是父结点
if treenode.GetPrev=treenode.Parent then
begin
result:=false;
exit;
end;
//正常情况
treenode.MoveTo(treenode.getPrevSibling,nainsert);
result:=true;
end;
//结点向下移
function NodeMoveDown(TreeNode: TTreeNode): boolean;
var
TempNode:TTreeNode;
begin
if TreeNode=nil then
begin
result:=false;
exit;
end;
//如果已是最后一个结点
if TreeNode.getNextSibling = nil then
begin
result := false;
exit;
end;
//如果是倒数第二个结点
if treenode.getNextSibling.getNextSibling=nil then
begin
TempNode:=treenode.getNextSibling;
NodeMoveUp(TempNode);
result:=true;
exit;
end;
//正常情况
Treenode.MoveTo(treenode.getNextSibling.getNextSibling,nainsert);
result:=true;
end;
//删除结点
function NodeDelete(TreeNode:TTreeNode;Hint,Title:string;Form:TForm):boolean;
var
Res:integer;
begin
if TreeNode=nil then
begin
result:=false;
exit;
end;
//如果包含子结点
if treenode.HasChildren=true then
begin
messagebox(form.Handle,'该目录包含有子目录,不能删除','提示',MB_OK);
result:=false;
exit;
end;
RES:=messagebox(form.Handle,pchar(hint),pchar(title),MB_YESNO);
if Res=6 then
begin
treenode.Delete;
result:=true;
end
else
begin
result:=false;
end;
end;
//添加(父)同级结点到末尾
function NodeAddLast(Tree:TTreeview;NodeName:string):boolean;
begin
try
tree.Items.Add(tree.Selected,NodeName);
except
begin
result:=false;
exit;
end;
end;
result:=true;
end;
//添加(父)同级结点到首位
function NodeAddFirst(Tree:TTreeview;NodeName:string):boolean;
begin
try
tree.Items.AddFirst(tree.Selected,NodeName);
except
begin
result:=false;
exit;
end;
end;
result:=true;
end;
//添加(子)同级结点到末尾
function NodeAddChildLast(Tree:TTreeview;NodeName:string):boolean;
begin
try
tree.Items.AddChild(tree.Selected,NodeName);
except
begin
result:=false;
exit;
end;
end;
result:=true;
end;
//添加(子)同级结点到首位
function NodeAddChildFirst(Tree:TTreeview;NodeName:string):boolean;
begin
try
tree.Items.AddChildFirst(tree.Selected,NodeName);
except
begin
result:=false;
exit;
end;
end;
result:=true;
end;
//遍历所有子结点
function GetAllChild(TreeNode:TTreeNode;Item:TStrings):boolean;
var
ND:TTreeNode;
ChildNum:integer;
i:integer;
begin
if TreeNode=nil then
begin
result:=false;
exit;
end;
if TreeNode.HasChildren=true then
begin
ChildNum:=treenode.Count;
ND:=treenode.getFirstChild;
for i:=1 to ChildNum do
begin
item.Add(nd.Text);
nd:=nd.getNextSibling;
end;
result:=true;
end
else
result:=false;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -