TreeView的問題 |
尚未結案
|
delphi
初階會員 發表:52 回覆:64 積分:38 註冊:2002-05-21 發送簡訊給我 |
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
|
delphi
初階會員 發表:52 回覆:64 積分:38 註冊:2002-05-21 發送簡訊給我 |
引言:
--------------------------------------------------------------------------------
What do you mean by 只要算出父系? BTW, TTreeNode.Level is the number of level (i.e. number of parent node) for a tree node.
--------------------------------------------------------------------------------
算出父系就是
aaa
ccc
ccc
bbb
ddd
ddd
ccc
我要算出aaa bbb ccc總數是3
謝謝 逃避不一定躲得過
面對不一定最難受
孤單不一定不快樂
得到不一定能長久
失去不一定不再有
轉身不一定最軟弱
別急著說別無選擇
別以為世上只有對與錯
許多事情的答案都不是只有一個
所以我們永遠有路可以走
你能找個理由難過
也一定能找到快樂
懂得放心的人找到輕鬆
懂得遺忘的人找到自由
懂得關懷的人找到朋友
|
delphi
初階會員 發表:52 回覆:64 積分:38 註冊:2002-05-21 發送簡訊給我 |
引言:
--------------------------------------------------------------------------------
What do you mean by 只要算出父系? BTW, TTreeNode.Level is the number of level (i.e. number of parent node) for a tree node.
--------------------------------------------------------------------------------
算出父系就是
aaa
sss
sss
bbb
ddd
ddd
ccc
我要算出aaa bbb ccc總數是3
謝謝 逃避不一定躲得過
面對不一定最難受
孤單不一定不快樂
得到不一定能長久
失去不一定不再有
轉身不一定最軟弱
別急著說別無選擇
別以為世上只有對與錯
許多事情的答案都不是只有一個
所以我們永遠有路可以走
你能找個理由難過
也一定能找到快樂
懂得放心的人找到輕鬆
懂得遺忘的人找到自由
懂得關懷的人找到朋友
|
flyup
資深會員 發表:280 回覆:508 積分:385 註冊:2002-04-15 發送簡訊給我 |
求treeview中一個子樹的深度和節點數量的方法和程式碼 方法如下:
procedure TForm1.Button2Click(Sender: TObject);
type
Nodesum=record
Node:TTreenode; //節點
Layer:Integer; //所在層
end;
var
a:array of Nodesum;
Node:TTreenode;
Depth,i,j:Integer;
begin
Depth:=0;
i:=0;
j:=0;
Listbox1.Items.Clear;
Setlength(a,Treeview1.Items.Count);
Node:=Treeview1.Selected; //使頂節點為您所選擇的節點
a[i].Node:=Node;
a[i].Layer:=0;
while a[i].Node< > nil do
begin
Node:=a[i].Node.Getfirstchild;//取其第一個子節點
while Node < > nil do
begin
j:=j+1;
a[j].Node:=Node;
a[j].Layer:=a[i].Layer+1; //此節點所在的層數
Node:=Node.GetNextSibling;
end;//如此循環,以取出此層所有節點
i:=i+1;
end;
i:=0;
while a[i].node< > nil do
begin
if a[i].Layer> Depth then
Depth:=a[i].Layer;//求最大的層數,即子樹深度
listbox1.Items.Add(a[i].Node.Text);
i:=i+1;
end;
If a[0].Node< > nil then
begin
listbox1.Items.Add('子樹節點共有: '+inttostr(i-1));//不含最上層節點
listbox1.Items.Add('了樹深度為: '+inttostr(Depth));
end
else
listbox1.Items.Add('您沒選擇任何節點');//如果沒選擇任何節點則顯示此句 end;
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
Not tested. But I think you should have an idea on how to do it...
function GetCount(ANode: TTreeNode): integer; var PNode,CNode: TTreeNode; begin Result := 0; if Assigned(ANode) then begin PNode := ANode.Parent; if Assigned(PNode) then begin PNode := PNode.Parent; if Assigned(PNode) then begin CNode := PNode.GetFirstChild; while Assigned(CNode) do begin inc(Result); CNode := PNode.GetNextChild(CNode); end; end else inc(Result); end; end; end; |
flyup
資深會員 發表:280 回覆:508 積分:385 註冊:2002-04-15 發送簡訊給我 |
|
delphi
初階會員 發表:52 回覆:64 積分:38 註冊:2002-05-21 發送簡訊給我 |
會有錯誤ㄝ!!!
我ㄉ程式
var
TN1: TTreeNode;
.....
iMsgform.Label4.Caption := '您有' IntToStr(GetCount(TN1)) ' 封駁回文件'; 逃避不一定躲得過
面對不一定最難受
孤單不一定不快樂
得到不一定能長久
失去不一定不再有
轉身不一定最軟弱
別急著說別無選擇
別以為世上只有對與錯
許多事情的答案都不是只有一個
所以我們永遠有路可以走
你能找個理由難過
也一定能找到快樂
懂得放心的人找到輕鬆
懂得遺忘的人找到自由
懂得關懷的人找到朋友
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
|
delphi
初階會員 發表:52 回覆:64 積分:38 註冊:2002-05-21 發送簡訊給我 |
我ㄉ程式
procedure TiAgent.TrayIcon1DblClick(Sender: TObject);
var
TN1: TTreeNode;
begin
Application.CreateForm(TiMsgform, iMsgform);
iMsgform.Show;
iMsgform.Label4.Caption := '您有' IntToStr(GetCount(TN1)) ' 封駁回文件';
錯誤訊息之後會停在
procedure TTrayIcon.DoDblClick(Sender: TObject);
begin //procedure TTrayIcon.DoDblClick
if Assigned(FOnDblClick) then
FOnDblClick(Sender);
end; //procedure TTrayIcon.DoDblClick 逃避不一定躲得過
面對不一定最難受
孤單不一定不快樂
得到不一定能長久
失去不一定不再有
轉身不一定最軟弱
別急著說別無選擇
別以為世上只有對與錯
許多事情的答案都不是只有一個
所以我們永遠有路可以走
你能找個理由難過
也一定能找到快樂
懂得放心的人找到輕鬆
懂得遺忘的人找到自由
懂得關懷的人找到朋友
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
引言: 我ㄉ程式I think you may have problem in the logic of your program... TN1 is a local variable (NOT initialized), it could be nil (GetCount will return 0) or other random values (access violation?).procedure TiAgent.TrayIcon1DblClick(Sender: TObject); var TN1: TTreeNode; begin Application.CreateForm(TiMsgform, iMsgform); iMsgform.Show; iMsgform.Label4.Caption := '您有' IntToStr(GetCount(TN1)) ' 封駁回文件'; 錯誤訊息之後會停在 procedure TTrayIcon.DoDblClick(Sender: TObject); begin //procedure TTrayIcon.DoDblClick if Assigned(FOnDblClick) then FOnDblClick(Sender); end; //procedure TTrayIcon.DoDblClick |
delphi
初階會員 發表:52 回覆:64 積分:38 註冊:2002-05-21 發送簡訊給我 |
我已經解決ㄌ謝謝大大ㄉ幫忙
我ㄉ方法
var
k: Integer;
inodeSum: integer;
begin
inodeSum := 0;
for k := 0 to TreeView2.Items.Count - 1 do
begin
if treeview2.Items.Item[k].Level = 0 then
inc(inodeSum);
end;
iMsgform.Label4.Caption := '您有' IntToStr(inodeSum) ' 封駁回文件';
evd; 逃避不一定躲得過
面對不一定最難受
孤單不一定不快樂
得到不一定能長久
失去不一定不再有
轉身不一定最軟弱
別急著說別無選擇
別以為世上只有對與錯
許多事情的答案都不是只有一個
所以我們永遠有路可以走
你能找個理由難過
也一定能找到快樂
懂得放心的人找到輕鬆
懂得遺忘的人找到自由
懂得關懷的人找到朋友
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |