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

請問在MDI的Child中要更改MainForm上的物件的值或call函數時的問題.

答題得分者是:herbert2
leochen1204
一般會員


發表:10
回覆:14
積分:4
註冊:2008-11-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-11-17 19:59:03 IP:203.71.xxx.xxx 訂閱
我在MDI的Child中, 在Child1中加了#include "MAIN.h" 使得Child中可以讀取全域變數及MainForm的物件
我在MainForm裡寫一個函數 void __fastcall TMainForm::Function1()
想要在Child1的按鈕中去執行該函數.
但是要 Run時會出現一個錯誤的視窗. 見附件~

這是什麼地方錯誤呢?

附加檔案:49215c878f1dd_pro1.gif
編輯記錄
leochen1204 重新編輯於 2008-11-17 20:00:49, 註解 無‧
herbert2
尊榮會員


發表:58
回覆:632
積分:878
註冊:2004-04-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-11-17 20:11:59 IP:211.72.xxx.xxx 訂閱
比較安全的寫法:
將公用 Function 寫入一個 Utility.cpp 與 Utility.h, include 進該 Project. 不要寫在 MDIForm 上.
aftcast
站務副站長


發表:81
回覆:1482
積分:1762
註冊:2002-11-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-11-17 21:02:59 IP:60.248.xxx.xxx 訂閱
除了herbert2的提醒要注意外,你的問題應該是出現在

void __fastcall TMainForm::Function1() 裡的程式。

可以的話把它po出來好幫你解決!

------



蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
leochen1204
一般會員


發表:10
回覆:14
積分:4
註冊:2008-11-06

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-11-17 22:27:59 IP:59.105.xxx.xxx 訂閱
如果是這樣子, 那Child1裡要如何使用Utility.cpp裡寫的Function呢?
可以舉一個簡單的例子嗎 ?

===================引 用 herbert2 文 章===================
比較安全的寫法:
將公用 Function 寫入一個 Utility.cpp 與 Utility.h, include 進該 Project. 不要寫在 MDIForm 上.
herbert2
尊榮會員


發表:58
回覆:632
積分:878
註冊:2004-04-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-11-17 23:04:17 IP:211.72.xxx.xxx 訂閱
與您呼叫原寫在 MDIForm 中的 Function 類似.
例如: Utility.cpp 中有個 int __fastcall FuncA(int Num) {...}
則 MDIChild 之 .h 中 include Utility.h,
MDIChild 要用時, .cpp 直接呼叫 int ixResult = FuncA(ixSend); 即可.

請注意: Utility.cpp 沒有 Form, 故不是 int __fastcall Form1::FuncA(int Num) {...}

===================引 用 leochen1204 文 章===================
如果是這樣子, 那Child1裡要如何使用Utility.cpp裡寫的Function呢?
可以舉一個簡單的例子嗎 ?

===================引 用 herbert2 文 章===================
比較安全的寫法:
將公用 Function 寫入一個 Utility.cpp 與 Utility.h, include 進該 Project. 不要寫在 MDIForm 上.
編輯記錄
herbert2 重新編輯於 2008-11-17 23:06:05, 註解 無‧
leochen1204
一般會員


發表:10
回覆:14
積分:4
註冊:2008-11-06

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-11-18 08:03:30 IP:203.71.xxx.xxx 訂閱
感謝您的解說!

不過我之前會想要寫在MainForm裡的原因是因為我的函數裡想要控制另一個Child2裡的物件
例如: Child2->Shape1->Left = Child2->Shape1->Left - 10;
這種語法寫在Utility.cpp中可以嗎?

===================引 用 herbert2 文 章===================
與您呼叫原寫在 MDIForm 中的 Function 類似.
例如: Utility.cpp 中有個 int __fastcall FuncA(int Num) {...}
則 MDIChild 之 .h 中 include Utility.h,
MDIChild 要用時, .cpp 直接呼叫 int ixResult = FuncA(ixSend); 即可.

請注意: Utility.cpp 沒有 Form, 故不是 int __fastcall Form1::FuncA(int Num) {...}

herbert2
尊榮會員


發表:58
回覆:632
積分:878
註冊:2004-04-16

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-11-18 09:41:05 IP:211.72.xxx.xxx 訂閱
Function(Parameters); // Parameters 中可傳多個 Component 的 Point 及其他 type 參數.
原則上, Child2 與 Child1 雖可能同時都已啟動, 但也可能只其一啟動, 您的做法可能不可行.
若真有此需要 (通常各 Child 互相之間應獨立, 只與 MDIForm 有互動,
Child1 <-> MDIForm, Child2 <-> MDIForm, 不要 Child1 <-> Child2.

不瞭解您的需求, 但感覺您應將 Child1 Child2 併成一個 Child,
用 PageControl 分 TabSheet 較恰當.

===================引 用 leochen1204 文 章===================
感謝您的解說!

不過我之前會想要寫在MainForm裡的原因是因為我的函數裡想要控制另一個Child2裡的物件
例如: Child2->Shape1->Left = Child2 Child1->Shape1->Left - 10; // ???
這種語法寫在Utility.cpp中可以嗎?
leochen1204
一般會員


發表:10
回覆:14
積分:4
註冊:2008-11-06

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-11-19 11:32:09 IP:203.71.xxx.xxx 訂閱
我發現我的錯誤是出現在MainForm裡的的__fastcall TMainForm::Function()裡面

我在函數裡面寫
void __fastcall TMainForm::AAAA()
{
ChildForm->Shape2->Width = area /10; //area是全域變數
ChildForm->Shape2->Height = area /10;
}
就會出現錯誤的視窗~ 但是可以執行~ 功能也可以正常~
只是不知道會不會有什麼影響...
herbert2
尊榮會員


發表:58
回覆:632
積分:878
註冊:2004-04-16

發送簡訊給我
#9 引用回覆 回覆 發表時間:2008-11-19 13:00:47 IP:211.72.xxx.xxx 訂閱
將元件指標傳給 Function AAAA 試看看.

===================引 用 leochen1204 文 章===================
我發現我的錯誤是出現在MainForm裡的的__fastcall TMainForm::Function()裡面

我在函數裡面寫
void __fastcall TMainForm::AAAA(TFrom *ChildForm, TShape *Shape2)
{
ChildForm->Shape2->Width = area /10; //area是全域變數
ChildForm->Shape2->Height = area /10;
}
就會出現錯誤的視窗~ 但是可以執行~ 功能也可以正常~
只是不知道會不會有什麼影響...
系統時間:2017-10-17 17:32:09
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!