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 由於類的宣告分為兩種 繼...