如何把值由 form2 傳到 form1 ? |
尚未結案
|
xfile
初階會員 發表:21 回覆:80 積分:25 註冊:2004-10-02 發送簡訊給我 |
大家好 :)
小弟找了站上的文章,大概是我用的關鍵字有問題,好像找不到我要的答案 我開了 form1(Auto-Create) 和 form2(Available),
form1 可以 include form2.h 檔,但 form2 不能 include form1.h ; form1 只有這些變數
--------------------------------------------------------------
TForm1 *Form1; int Msg_Form_Count;-------------------------------------------------------------- form2 只有這些變數 -------------------------------------------------------------- class TForm2 : public TForm { __published: // IDE-managed Components TTimer *Timer1; void __fastcall Timer1Timer(TObject *Sender); private: // User declarations public: // User declarations int delta; __fastcall TForm2(TComponent* Owner); };在這種條件限制下,有什?方法可以讓 form2 自己去讀 form1 的值 ? form2 可以回傳任何值給 form1 嗎 ? 目前想不到作法的就是當 form2 要 delete 掉時,是由 form1 來控制的 ; 也就是說當 form2 達到 delete 的條件時,由 form2 傳值通知 form1 ,並把程式流程還給 form1,再由 from1 來刪除 form2。 請問各位這個要怎麼做 ? 謝謝 |
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
xfile: form1 可以 include form2.h 檔,但 form2 不能 include form1.h ; 這本身就有很大的問題,會何form2 不能 include form1.h? 試試看! Tform2 *form2; try { form2=new Tform2(Application); form2->delta=Msg_Form_Count; //form1值傳給form2 form2->ShowModal(); Msg_Form_Count=form2->delta; //form2值傳回form1 delete form2; } catch (...) { delete form2; } 在這種條件限制下,有什麼方法可以讓form2自己去讀form1的值? form2開啟前先讀form1的值,如上例! form2 可以回傳任何值給 form1 嗎 ? 如上例,可以! 請參考!Andy Chang
------
Andy Chang |
xfile
初階會員 發表:21 回覆:80 積分:25 註冊:2004-10-02 發送簡訊給我 |
引言:謝謝,那請問有方法可以把程式流程轉回 form1 嗎 ? 因為form2要做成元件一般,會 new 出很多個來, 所以我很需要在問題中提到的技巧 發表人 - xfile 於 2004/10/20 11:11:01xfile: form1 可以 include form2.h 檔,但 form2 不能 include form1.h ; 這本身就有很大的問題,會何form2 不能 include form1.h? 因為這是條件啊,應該沒有元件直接 include "form1.h" 這樣做吧 ? 試試看! 謝謝,我試試 :) 在這種條件限制下,有什麼方法可以讓form2自己去讀form1的值? form2開啟前先讀form1的值,如上例! form2 可以回傳任何值給 form1 嗎 ? 如上例,可以! 請參考!Andy Chang |
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
引言:xfile:你的問題很有意思!但我還是不太懂,請參考一下 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=56341 【問題】請問有關動態產生FORM的參數傳遞問題?? 答題得分者為:andychang1690 可否解決你的問題;form2要做成元件一般,會 new 出很多個來 我建議你也可以朝Frame方式: http://delphi.ktop.com.tw/topic.php?topic_id=43594 【BCB】【發表】同時使用多個 TFrame Instance 發表人:dllee 版主 請參考! Andy Chang引言:謝謝,那請問有方法可以把程式流程轉回 form1 嗎 ? 因為form2要做成元件一般,會 new 出很多個來, 所以我很需要在問題中提到的技巧 發表人 - xfile 於 2004/10/20 11:11:01xfile: form1 可以 include form2.h 檔,但 form2 不能 include form1.h ; 這本身就有很大的問題,會何form2 不能 include form1.h? 因為這是條件啊,應該沒有元件直接 include "form1.h" 這樣做吧 ? 試試看! 謝謝,我試試 :) 在這種條件限制下,有什麼方法可以讓form2自己去讀form1的值? form2開啟前先讀form1的值,如上例! form2 可以回傳任何值給 form1 嗎 ? 如上例,可以! 請參考!Andy Chang
------
Andy Chang |
ray24
中階會員 發表:18 回覆:88 積分:56 註冊:2002-07-24 發送簡訊給我 |
插個花... BCB Form 結構是這樣ㄉ 一般會設定一個form 叫 mian Form
程式一開始會以這個Form為第一個開啟給使用者看的form
然後要呼叫其他的form步驟如下
1.include 這個form 的標頭檔
2.使用form 所提共的方法show() or ShowModal() 來顯示其它form 當然你自型 new 出來的動態form 除了解構與建構要自己來外
其它的使用方法與bcb幫你見出來的form是一樣的 另外一提 show() 並不會 Focuse 鎖住Form...所以使用後可以自由的切換form
但ShowModal()會lock住form必須關掉這個form才可使用其他的form 希望對你的form 流程上的管理有幫助 ----------------------
台上一分鐘,台下十年功
------
台上一分鐘,台下十年功 |
xfile
初階會員 發表:21 回覆:80 積分:25 註冊:2004-10-02 發送簡訊給我 |
引言: 插個花... 另外一提 show() 並不會 Focuse 鎖住Form...所以使用後可以自由的切換form 但ShowModal()會lock住form必須關掉這個form才可使用其他的form 希望對你的form 流程上的管理有幫助因為我希望做到 當form2達到被刪除的條件時,form2能主動通知form1刪除它,所以需要用主動的傳值法。 關於這點,我已經找到 void __fastcall (__closure *Del)(int); 這招來把 form2 的函式指向 form1,成功轉移流程。 接下來就是關掉它,也就是呼叫 Del 函式的時機,我現在無法把在 刪除 form2 前把 form2 發生的所有事件清光,這樣會造成當我在 form1 中刪除 form2 時出現記憶體存取錯誤。因為已經被我刪掉的 那個 form 仍有事件要進行,殘存的事件無法跟 form 對應而發生錯誤 ,苦惱 ....... 若要等所有事件發生完畢也是可以,可是我不知道要怎麼做 :( 好不容易解決了一件問題的說 :( 發表人 - xfile 於 2004/10/20 17:14:23 發表人 - xfile 於 2004/10/20 17:21:17 |
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
xfile:我個人感覺你好像把東西處理複雜化。一定需要由Form1去Close Form2?
試試API吧!
// HANDLE hCurrentWindow
PostMessage(Form2->Handle, WM_QUIT, 0, 0);
或
SendMessage(GetActiveWindow(), WM_CLOSE, 0, 0); 請參考:
http://delphi.ktop.com.tw/topic.php?topic_id=33635
【問題】請問在程式中如何可以關閉另一程式?
答題得分者為:ha0009 http://delphi.ktop.com.tw/topic.php?topic_id=43250
【問題】sendmessage(handle,wm_close,0,0) 關閉ie 無效?
答題得分者為:Rain Rain 解釋sendmessage及postmessage 之間的差別
The SendMessage function sends the specified message to a window or windows. It calls the window procedure for the specified window and does not return until the window procedure has processed the message. The PostMessage function places (posts) a message in the message queue associated with the thread that created the specified window and then returns without waiting for the thread to process the message. SendMessage發送到消息至表單過程(調用WndProc)並且等待處理結果再返回、PostMessage不同、只是把消息存入待處理的消息佇列中、不等待線程對消息的處理結果、沒有返回值。WM_CLOSE和WM_QUIT似乎是兩個比較特殊的消息、之所以用SendMessage無法關閉IE、可能是IE視窗消息處理機制引起的(換了其他的視窗例如記事本則可)、具體是怎麼樣的就不清楚了
請參考! Andy Chang
------
Andy Chang |
xfile
初階會員 發表:21 回覆:80 積分:25 註冊:2004-10-02 發送簡訊給我 |
引言: xfile:我個人感覺你好像把東西處理複雜化。一定需要由Form1去Close Form2? 試試API吧! Andy Chang因為某些原因,所以會有上述的條件限制,各位就把它當成背著龜殼練功吧 我是用 form 去處理的,在 form 中只要下了 Close(),應該就會把 form 刪除 並釋放記憶體,frame 則不會這樣,所要額外作 delete 的動作。 我師傅沒看到我是用 form 去做的,以為我用 frame,所以才會一直要求我 要由 form1 去刪掉它,所以這是烏龍事件 :Q 我還沒機會用上各位提供的招式哩 還是很感謝各位 :) |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |