線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1784
推到 Plurk!
推到 Facebook!

如何在MDI中獲取其子視窗的寬、高大小值?

尚未結案
clio4177
一般會員


發表:28
回覆:21
積分:9
註冊:2002-07-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-26 16:44:03 IP:163.28.xxx.xxx 未訂閱
各位大大: 請問在MDI中如何獲取其子視窗的大小或者最大化時的範圍值?因為我寫了子視窗寬、高範圍值的抓取程式,但是只要滑鼠一拖拉子視窗時就會出現錯誤訊息。我的程式碼如下: void __fastcall TPCStatus::FormResize(TObject *Sender) { Memo1->Lines->Add(PCStatus->Width); Memo1->Lines->Add(PCStatus->Height); } 出現的錯誤訊息如下: "Access violation at address 000402F43 in module 'EDDM.exe'. Read of address 00000048" 請問該如何修正上列程式,才能正確獲得MDI子視窗的寬、高大小值?
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-26 17:09:25 IP:61.30.xxx.xxx 未訂閱
能不能請用比較靜態的方式去捉 因為你用這樣的方式 我很怕他會死在什麼不確定的地方 因為有些地方,也許程式會覺的是NULL 而不能判斷 但你又要去讀值,就很容易會變成ERROR
clio4177
一般會員


發表:28
回覆:21
積分:9
註冊:2002-07-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-26 17:33:01 IP:163.28.xxx.xxx 未訂閱
turboted: 您所指的"比較靜態的方式"是啥意思???我不太清楚耶!!如果我只要抓取當MDI主視窗最大化時,且其子視窗亦是最大化時的長、寬值,可否請您用例子作說明。
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-26 18:02:43 IP:61.30.xxx.xxx 未訂閱
比較靜態,就是指,不是一直要求更新值 您說只要最大化時才要 那就等到您按下最大化的button時,再來求值就好了
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-26 20:15:39 IP:61.224.xxx.xxx 未訂閱
我剛試了一下,不會有問題呀!我狂拖拉都沒事  < class="code"> void __fastcall TMDIChild::FormResize(TObject *Sender) { Memo1->Lines->Add(this->Width); Memo1->Lines->Add(this->Height); } 由 BCB New 一個 MDI 的 Application 在 MDIChild 的 FormResize 中加上上述的 code。 clio4177 您的 code 有問題會發生 Exception 的原因是 PCStatus 這個物件只有在一開始由產生時第一個表單有作用,之後 new 出來的 MDI Child 指標一定不會是 PCStatus,所以你一存取他鐵掛! 對於所有表單,只要您在使用時不只一份,一定要用 this ,不要用 BCB 制式的指標變數,如 Form1,Form2 之類的。 沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
clio4177
一般會員


發表:28
回覆:21
積分:9
註冊:2002-07-17

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-26 20:17:23 IP:163.28.xxx.xxx 未訂閱
turboted: 謝謝您的解說。那請問turboted我如何在按下最大化按鈕後,獲得該視窗的大小值呢?懇請您給我一點指示。謝謝!!
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-26 22:38:14 IP:218.166.xxx.xxx 未訂閱
您可以先參考dllee兄的建議看看 如果不行的話 最大化 您可以去捉Form的WindowProc的SW_SHOWMAXIMIZED
lcsboy
版主


發表:87
回覆:622
積分:394
註冊:2002-06-18

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-05-26 23:18:22 IP:211.76.xxx.xxx 未訂閱
想要任何時刻得知MDI目前的任何屬性嗎? 如寬.高, 請參考以下方式    TMDIChild *MDI; ...... MDI=dynamic_cast (ActiveMDIChild); // 取得目前active的MDI視窗指標 ShowMessage(MDI->Height); // 秀出active MDI視窗的Caption ...... MDI=MDIChildren[0]; // 取得很多個MDI視窗裡的第一個MDI視窗指標 ShowMessage(MDI->Height);  ...... MDI=MDIChildren[MDIChildCount-1]; //取得很多個MDI視窗裡的最後一個MDI視窗指標 ShowMessage(MDI->Height);  ......    PS:MDIChildren陣列裡的排列順序不一定就是你開啟MDI的順序 如何取得 > 以上的解法不知適用否 發表人 -
系統時間:2024-04-29 4:49:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!