全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1529
推到 Plurk!
推到 Facebook!

請問一個delphi語法轉成BCB.

答題得分者是:taishyang
pireer
初階會員


發表:73
回覆:80
積分:30
註冊:2004-12-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-05-21 15:10:58 IP:61.220.xxx.xxx 訂閱
這是flishman前輩之前回答其他人問題的語法.
剛好我也需要用到.但我翻不太過來.
不知道有沒有懂的前輩能幫我翻..
謝謝
http://delphi.ktop.com.tw/board.php?cid=30&fid=71&tid=79803
編輯記錄
pireer 重新編輯於 2007-05-21 15:12:39, 註解 無‧
pireer 重新編輯於 2007-05-21 15:15:58, 註解 無‧
pireer 重新編輯於 2007-05-21 15:16:14, 註解 無‧
pireer 重新編輯於 2007-05-21 15:19:20, 註解 無‧
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-05-21 15:47:38 IP:122.124.xxx.xxx 未訂閱
<textarea class="cpp" rows="10" cols="60" name="code">//.h class TForm1 : public TForm { __published: // IDE-managed Components TTreeView *TreeView1; TButton *Button1; void __fastcall Button1Click(TObject *Sender); private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); void __fastcall TravelAllChild(int &ChildCount, TTreeNode* pNode); int __fastcall GetChildCount(TTreeNode *pNode); }; //.cpp //--------------------------------------------------------------------------- void __fastcall TForm1::TravelAllChild(int &ChildCount, TTreeNode* pNode) { ChildCount; if (pNode->HasChildren) { for (int i=0; i < pNode->Count; i ) { TravelAllChild(ChildCount, pNode->Item[i]); } } } //--------------------------------------------------------------------------- int __fastcall TForm1::GetChildCount(TTreeNode *pNode) { int r=0; if (pNode) { TravelAllChild(r, pNode); } r--; return r; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { ShowMessage("Find " IntToStr(GetChildCount(TreeView1->Selected)) " childnode(s)."); } //--------------------------------------------------------------------------- </textarea>
編輯記錄
taishyang 重新編輯於 2007-05-21 15:50:02, 註解 無‧
taishyang 重新編輯於 2007-05-22 11:10:55, 註解 無‧
pireer
初階會員


發表:73
回覆:80
積分:30
註冊:2004-12-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-05-21 15:57:37 IP:61.220.xxx.xxx 訂閱
感謝前輩幫忙...
pireer
初階會員


發表:73
回覆:80
積分:30
註冊:2004-12-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-05-21 16:19:53 IP:61.220.xxx.xxx 訂閱
後來測試發現會有錯誤...

當有子NODE時.按下Button1Click.
就會在此行發生List Index超出的錯誤.
TravelAllChild(ChildCount, pNode->Item[i]);
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-05-21 16:26:21 IP:122.124.xxx.xxx 未訂閱
我測試的TreeView如下圖所示,但沒有發生你所描述的現象

pireer
初階會員


發表:73
回覆:80
積分:30
註冊:2004-12-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-05-21 16:50:52 IP:61.220.xxx.xxx 訂閱
我完全依照前輩給的CODE來測試..
測試TreeView為下.當我點選B時.顯示正確..
只要點選A或底下有子NODE.就錯.

root
|___A
|___B

<textarea rows="8" cols="80"> ChildCount; if (pNode->HasChildren) { for (int i=0; i < ChildCount; i ) { TravelAllChild(ChildCount, pNode->Item[i]); } }</textarea><br />
說明一下點A進入時的動作..
一進入這函式後.pNode->HasChildren = true.
所以他會進去.此時ChildCount = 1.
當執行 TravelAllChild(ChildCount, pNode->Item[i]); 此時i = 0 ------A步驟
他會再跑一次這函式..然後ChildCount =2..
檢查是否有子NODE..回傳flase.
離開這函式..然後接著他會回A步驟的for迴圈.由於ChildCount =2.所以他會再進去一次.
此時TravelAllChild(ChildCount, pNode->Item[i]); pNode->Item[i] i =1 然後就出現上述的錯誤訊息..

taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-05-21 17:01:26 IP:122.124.xxx.xxx 未訂閱
我把我測試的程式上傳到
http://delphi.ktop.com.tw/board.php?cid=31&fid=97&tid=88592

你再試看看吧
pireer
初階會員


發表:73
回覆:80
積分:30
註冊:2004-12-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-05-22 11:01:33 IP:61.220.xxx.xxx 訂閱
前輩我找到原因了..
你給我的CODE是這樣.但你程式不是這樣寫
<textarea rows="8" cols="80"> ChildCount; if (pNode->HasChildren) { for (int i=0; i < ChildCount; i ) { TravelAllChild(ChildCount, pNode->Item[i]); } }</textarea><br />
你後來程式的寫法跟上面一樣..
只是再for迴圈 你是寫 i < pNode->Item...所以我的才會執行錯誤..
感謝前輩指點...

taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-05-22 11:12:17 IP:122.124.xxx.xxx 未訂閱
PO上來修改的時候沒有察覺,不好意思^^
已修正
系統時間:2024-05-06 12:11:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!