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

不同的Form共用變數或函式

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


發表:9
回覆:2
積分:2
註冊:2009-05-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-07-14 10:05:26 IP:203.67.xxx.xxx 訂閱
請問一個我開了一個VCL Forms Appliation,上面設立了FORM1、FORM2,這兩個form需要幾個變數互相傳遞訊息,也有用到功能完全相同的自訂函式,但是兩者卻不同時存在(用auto-create forms的方式,當form1關閉後才產生form2。),所以應該是沒辦法將變數、函式定義成其中一個form的pubilc成員給另一個引用。

目前我想使用全域變數、函式來解決這個問題,並且想將這些變數、函式做成一個單獨的檔案(比如像是Global.cpp)以方便管理,網路上查到的資料應該是開一個"unit"並將程式寫在其中,然而開啟後卻發現它給我unit.h、unit.cpp兩個檔案,unit.h我卻不知道該怎麼使用,另外unit預設是沒有幫我include任何表頭檔,所以我沒辦法使用UnicodeString這個形態,不知道要include哪個表頭檔才能使用,另外在build的時候也遇到form1跟form2不認識unit裡宣告的變數等情況。

或許使用全域變數、函式來克服這問題不是好方法,小弟我又缺乏對這種比較型態的程式的編寫經驗,所以想請問一下一般來說大家遇到這狀況會怎麼解決呢?如果非得使用全域變數、函式來解決這個問題,正確來說又該怎麼處理呢?
herbert2
尊榮會員


發表:58
回覆:640
積分:894
註冊:2004-04-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-07-15 15:14:21 IP:211.72.xxx.xxx 訂閱
功能完全相同的自訂函式做成一個單獨的檔案(比如像是Global.cpp及Global.h)後, FROM1.h 及 FORM2.h 都 include Global.h 便可用.
(form1跟form2不認識unit裡宣告的變數等情況, 乃因未 include unit.h 吧!)
至於 FORM1 與 FORM2 要互傳訊息, 可考慮利用 Screen->Tag 存一個 TStrings 的位址,
再於 FORM1 及 FORM2 的建構 Function 中將其引用,
*.h 之 private: 段設 TStrings *MyStrings;
*.cpp 之 __fastcall TFORM1::TFORM1(TComponent* Owner) : TForm(Owner) 段寫 MyStrings = (TStrings *)(Screen->Tag);
如此, FORM1 與 FORM2 都可對 MyStrings 做 Read 與 Write 動作, 便可互傳訊息.
MyStrings->Strings(i) 宜用 Name=Value 的格式, 方便設定 Value 與讀取 Value.

也可考慮將要傳遞的訊息用 TStrings 的 SaveToFile() 存檔, 供另一 Form 以 LoadFromFile() 讀取.

UnicodeString 需 2009 版才有, 之前版本須加入 TNT Ware 才能使用.
系統時間:2024-03-29 5:26:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!