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

請問兩ActiveForm彼此要傳送訊息,有何方法?

答題得分者是:RaynorPao
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-26 19:23:00 IP:211.78.xxx.xxx 未訂閱
前輩們好,小弟的ActiveForm規模已經越寫越大了, 所以現在需要另開一個Form負責新的功能, 且可以和原有的ActiveForm互傳訊息, 一共試了三種方法... (一)在ActiveForm上加入一個Form用show的方式... 但似乎是失敗了~ (二)在ActiveForm上加入一個有Form的DLL,結果Form出來了, 但卻不能操控之前的ActiveForm,要關掉新產生出來的Form, 才能回去使用之前的ActiveForm...這...,起碼Form有出來, 只是要傳訊息就... (三)再寫一個AcitveForm,然後用在現在這個ActiveForm開超連結去叫出來, 但是兩個ActiveForm彼此互看,不知如何對傳訊息?? 所以來請教前輩們,能對我上面三個方法給點意見, 或是有更好的方法授之, 小弟主要功能是可以互傳訊息(資料), 我有去看過之前的文章,但大家好像都沒有回答這個問題... 我相信一定有方法的,望前輩們開解~謝謝了!!
dllee
站務副站長


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-26 21:06:27 IP:61.224.xxx.xxx 未訂閱
要互傳訊息很簡單,方法也很多: 1. 用 FindWindow 或其他方法找到對方視窗的 Handle 再 SendMessage 即可。 2. 開個暫存檔兩者一起存取 3. 將交換資料放在 Registry 內的某個 Key 或某些 Key 4. ...    沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-27 09:21:37 IP:211.78.xxx.xxx 未訂閱
謝謝dllee前輩!! 小弟有些疑問想再請教一下 使用的是
dllee
站務副站長


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-27 09:54:12 IP:61.231.xxx.xxx 未訂閱
引言: 謝謝dllee前輩!! 小弟有些疑問想再請教一下 使用的是>< face="Verdana, Arial, Helvetica"> 哈哈... 我可沒寫過 ActiveForm... 只是直覺認為只要是 Windows 就可以 SendMessage... 也許在 ActiveForm 下真的不可以用吧...
引言: 還有第三種方法 「將交換資料放在 Registry 內的某個 Key 或某些 Key」 這是種什麼樣的方法呢? 可否請前輩講的大概,讓我對這方法有初步認識,謝謝!!
請參考 BCB Online Help 的 TRegIniFile methods 部分的 TRegIniFile 或 WriteString 都有資料寫入的範例,要讀出資料用 ReadString,如果有其他的資料型態,可以使用 ReadInteger 等等。 另外也可以使用 TRegistry 這個元件,效果相同,與 TRegIniFile 用法大同小異,只是 TRegIniFile 與 TIniFile 的操作方法相同,比較容易操作。 沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-27 10:17:07 IP:203.73.xxx.xxx 未訂閱
引言: 前輩們好,小弟的ActiveForm規模已經越寫越大了, 所以現在需要另開一個Form負責新的功能, 且可以和原有的ActiveForm互傳訊息, 一共試了三種方法... (一)在ActiveForm上加入一個Form用show的方式... 但似乎是失敗了~ (二)在ActiveForm上加入一個有Form的DLL,結果Form出來了, 但卻不能操控之前的ActiveForm,要關掉新產生出來的Form, 才能回去使用之前的ActiveForm...這...,起碼Form有出來, 只是要傳訊息就... (三)再寫一個AcitveForm,然後用在現在這個ActiveForm開超連結去叫出來, 但是兩個ActiveForm彼此互看,不知如何對傳訊息?? 所以來請教前輩們,能對我上面三個方法給點意見, 或是有更好的方法授之, 小弟主要功能是可以互傳訊息(資料), 我有去看過之前的文章,但大家好像都沒有回答這個問題... 我相信一定有方法的,望前輩們開解~謝謝了!!
gemi0305 你好:
(1)在你的 ActiveForm Project 中按 File/New/Form 就會新增一個 Form1,
   然後在你的 ActiveForm 上加一個 Button1,在 ActiveFormX01Impl1.cpp
   中加入以下的程式碼
#> >
    -- 
        
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-27 15:01:06 IP:211.78.xxx.xxx 未訂閱
RaynorPao前輩, sendmessage真的可以在ActiveForm用嗎? @@ *興奮發亮的雙眼* 但我在compiler時,會在.h檔出現    [C++ Error] ActiveFormImpl1.h(32): E2219 Wrong number of arguments in call of macro 'MESSAGE_HANDLER'    我在.h的程式是 public:                // User declarations  ......   BEGIN_MESSAGE_MAP       MESSAGE_HANDLER(WM_COPYDATA, TWMCopyData, OnCopyDataMsg)  END_MESSAGE_MAP(TActiveForm) }    小弟不才,請前輩們指點一下, 另外請教前輩一個觀念的問題, 在ActiveForm上用sendmessag時 FindWindow裡第二個參數window name要寫誰? 用Form的話,是寫Form的title,但ActiveForm是嵌在html裡, 所以該寫html的title,還是寫ActiveForm原來的title(雖然被隱藏了)    還有因為小弟以前從來沒用過GetData和SetData, 看了一下說明文件,是用在database上的, 其實看它的example看的不是很懂,在書上也找不到相關的說明, 如果前輩能忙中抽空,可否教授一下,謝謝了
dllee
站務副站長


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-27 15:48:55 IP:61.231.xxx.xxx 未訂閱
如果您可以接受用 TRegIniFile 那就把自己的 Handle 放到某個 Key 內不必再叫用 FindWindow 了,如果還是想試試 FindWindow,可以先用    ■【BCB】【發表】取得視窗列表 + 視窗內所有子視窗元件列表(分層顯示)+ 顯示 / 隱藏 / 改文   http://delphi.ktop.com.tw/topic.php?TOPIC_ID=30743    看看取不取得到您所寫的 ActiveForm 的視窗,有可能像你所說的 ActiveForm 是在流覽器內,可能抓不到。此時 TRegIniFile 就可以派上用場  另外,包大人說的 class="code"> TRegIniFile *Reg = new TRegIniFile(""\\Software\\MyComp"); Reg->WriteInteger("MyApp","ActiveForm1",int(this)); delete Reg; 在 ActiveForm2
  TRegIniFile *Reg = new TRegIniFile(""\\Software\\MyComp");
  TObject *aObject=(TObject *)Reg->ReadInteger("MyApp","ActiveForm1",0);
  delete Reg;
  TActiveForm1 *aForm1=dynamic_cast<TActiveForm1 *>(aObject);
  if(aForm1!=NULL)
  {
    MyData=aForm1->GetData(); // 請自行發揮 
  }  
    <>沒空更新的網頁...
 href="http://dllee.adsldns.org">http://dllee.adsldns.org  介紹Shells,LiteStep,GeoShell....    發表人 - dllee 於 2003/05/27  15:50:53
        
------
http://www.ViewMove.com
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-05-27 16:53:29 IP:203.73.xxx.xxx 未訂閱
引言: RaynorPao前輩, sendmessage真的可以在ActiveForm用嗎? @@ *興奮發亮的雙眼* 但我在compiler時,會在.h檔出現 [C Error] ActiveFormImpl1.h(32): E2219 Wrong number of arguments in call of macro 'MESSAGE_HANDLER' 我在.h的程式是 public: // User declarations ...... BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_COPYDATA, TWMCopyData, OnCopyDataMsg) END_MESSAGE_MAP(TActiveForm) } 小弟不才,請前輩們指點一下, 另外請教前輩一個觀念的問題, 在ActiveForm上用sendmessag時 FindWindow裡第二個參數window name要寫誰? 用Form的話,是寫Form的title,但ActiveForm是嵌在html裡, 所以該寫html的title,還是寫ActiveForm原來的title(雖然被隱藏了) 還有因為小弟以前從來沒用過GetData和SetData, 看了一下說明文件,是用在database上的, 其實看它的example看的不是很懂,在書上也找不到相關的說明, 如果前輩能忙中抽空,可否教授一下,謝謝了 < face="Verdana, Arial, Helvetica">
gemi0305 你好:
(1)試試看把關鍵字 MESSAGE_HANDLER 改成 VCL_MESSAGE_HANDLER,不過,我已
   經試過了,在 ActiveForm 被啟動的時候會不穩定,甚至會把整個 IE 給關
   閉,原因目前不明
( >
//---------------------------------------------------------------------------
// > >
(>    -- 
        
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-05-27 17:40:07 IP:211.78.xxx.xxx 未訂閱
兩位前輩,真是太精彩了!!! 先是dllee前輩的那程式,實在太酷了, 抓Handle超好用,ActiveForm依附在ie上,所以Handle果然是Brower的Title, 不是ActiveForm本身的自己~ 而dllee前輩給我的範例程式我正在練習中 >
系統時間:2024-04-29 9:08:56
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!