樹操作的簡便過程

2021-04-20 11:36:29 字數 4445 閱讀 5531

為了使繁雜的樹操作變得簡單,特此寫了以下這個單元。為了節省時間,這個單元沒有物件導向,而僅僅是通過過程來實現的,它可以被使用在任何版本的delphi,從而完成簡便的樹操作

unit treectrls;

inte***ce

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;

vartempnode: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;

varres: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;

endelse

begin

result:=false;

end;

end;

//新增(父)同級結點到末尾

function nodeaddlast(tree:ttreeview;nodename:string):boolean;

begin

trytree.items.add(tree.selected,nodename);

except

begin

result:=false;

exit;

end;

end;

result:=true;

end;

//新增(父)同級結點到首位

function nodeaddfirst(tree:ttreeview;nodename:string):boolean;

begin

trytree.items.addfirst(tree.selected,nodename);

except

begin

result:=false;

exit;

end;

end;

result:=true;

end;

//新增(子)同級結點到末尾

function nodeaddchildlast(tree:ttreeview;nodename:string):boolean;

begin

trytree.items.addchild(tree.selected,nodename);

except

begin

result:=false;

exit;

end;

end;

result:=true;

end;

//新增(子)同級結點到首位

function nodeaddchildfirst(tree:ttreeview;nodename:string):boolean;

begin

trytree.items.addchildfirst(tree.selected,nodename);

except

begin

result:=false;

exit;

end;

end;

result:=true;

end;

//遍歷所有子結點

function getallchild(treenode:ttreenode;item:tstrings):boolean;

varnd: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;

endelse

result:=false;

end;

end.

簡便操作WPF資料繫結

wpf資料繫結的應用在剛剛接觸wpf的朋友眼中看來是乙個比較難以掌握的技術。不過,實際上熟練的掌握這一技術還是比較簡單的。ad wpf開發工具是乙個比較實用的輔助工具。主要為開發人員實現了圖形介面處理的一些相關功能。wpf資料繫結非常的好用,下面的例子可以說明這點。我們在xaml 中建立乙個list...

excel 相關簡便操作 之 vlookup 操作

準備工作 提取excel括號前的值 left b2,find b2 1 提取excel括號中的值 trim right substitute substitute b2,rept 10 rept 10 20 下圖表a中取length 從表a到表b,有乙個 值複製 的動作 使用vlookup 下圖表c...

vi vim 編輯器簡便操作命令

想要更快更準的運用vim編輯器,記住以下快捷鍵,會有很大幫助哦!按i o a進入編輯模式。s g 來在全部內容的行首新增 號注釋 1,10 s g 在1 10 行首新增 號注釋 2,5 co 5 將第2行到第5行的內容複製到第5行下 dg 刪除游標後到行尾的所有字元 d 刪除游標到行尾的字元 只支援...