Delphi 構造單位樹

2021-05-23 22:57:42 字數 2494 閱讀 2339

procedure builddwtree(treeview: ttreeview; cds: tclientdataset);

vardw: tdw;

lencode: integer;

pcode, lcode: string;

pnode, node: ttreenode;

function findparentnode(cnode: ttreenode; lcode: string): ttreenode;

vartmpnode: ttreenode;

begin

result := nil;

if cnode = nil then exit;

tmpnode := cnode.parent;

while not (tmpnode = nil) do

begin

if assigned(tmpnode.data) and (length(lcode) - length(tdw(tmpnode.data).l_code) =4) and

(pos(tdw(tmpnode.data).l_code, lcode) =1) then

begin

result := tmpnode;

exit;

end;

tmpnode := tmpnode.parent;

end;

end;

begin

cds.disablecontrols;

tryfreetreenodedata(treeview);

treeview.items.clear;

with cds do

begin

pnode := nil;

first;

while not eof do

begin

lcode := fieldbyname('l_code').asstring;

lencode := length(lcode);

if (lencode =0) or (lencode mod 4 <> 0) then //級次碼不正確,跳過

begin

next;

continue;

end;

if (lencode = 4) then

begin

dw := tdw.create;

setdatasettodw(cds, dw);

pnode := treeview.items.addchildobject(nil, dw.dw_name, dw);

pcode := lcode;

endelse begin

if (lencode - length(pcode) =4) and (pos(pcode, lcode)=1) then //下級

begin

dw := tdw.create;

setdatasettodw(cds, dw);

pnode := treeview.items.addchildobject(pnode, dw.dw_name, dw);

pcode := lcode;

endelse begin //非下級

node := findparentnode(pnode, lcode);  //向上查詢上級

if node <> nil then

begin

pnode := node;

dw := tdw.create;

setdatasettodw(cds, dw);

pnode := treeview.items.addchildobject(pnode, dw.dw_name, dw);

pcode := lcode;

end//if

else begin //未找到,加到根下

dw := tdw.create;

setdatasettodw(cds, dw);

pnode := treeview.items.addchildobject(nil, dw.dw_name, dw);

pcode := lcode;

end;

end;//else

end;//else

//新增圖示

if assigned(pnode) then

begin

pnode.imageindex    := 2;

pnode.selectedindex := 2;

if assigned(pnode.parent) then

begin

pnode.parent.imageindex    := 15;

pnode.parent.selectedindex := 15;

end;

end;

next;

end; //while

end;//with

finally

cds.enablecontrols;

end;

end;

線段樹構造

線段樹是一棵二叉樹,他的每個節點包含了兩個額外的屬性start和end用於表示該節點所代表的區間。start和end都是整數,並按照如下的方式賦值 實現乙個build方法,接受 start 和 end 作為引數,然後構造乙個代表區間 start,end 的線段樹,返回這棵線段樹的根。您在真實的面試中...

Delphi建構函式和析構函式

2013 08 20 16 31 287人閱讀收藏 舉報 delphi 6 作者同類文章x delphi的建構函式的定義是 constructor create delphi的析構函式的定義是 destructor destroy 析構函式是不能過載的,但是建構函式是可以過載的。建構函式在過載的時候...

Delphi類的構造與析構

當我們不在使用某個物件時,必須將這個物件從記憶體空間中刪除,這樣可以避免不必要的資料浪費記憶體空間。object pascal類的物件構造方法必須以保留字 constructor 取代 function 或 procedure 物件的析構必須使用保留字 destructor 由於類的宣告分為兩種 繼...