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

請教有關Message傳遞的問題

答題得分者是:taishyang
dueseven
一般會員


發表:5
回覆:9
積分:7
註冊:2007-05-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-07-30 20:54:56 IP:140.110.xxx.xxx 訂閱
我寫了一個小程式想要測試利用Windows Message傳遞訊息,但是不知道是不是哪裏有錯誤,
明明有訊息進來,程式就是不會跳進副程式裡執行,希望有經驗的先進能幫我看一下,
到底是Coding哪裏有問題呢?

首先在 header檔中定義了:
[code cpp]
#define WM_AD120MSG WM_USER 210
[/code]

在Form1.h中定義:

[code cpp]
class TForm1 : public TForm
{
protected:
void __fastcall OnDeviceMesg(TMessage &msg);
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_AD120MSG,TMessage,OnDeviceMesg)
END_MESSAGE_MAP(TForm)
..........
}
[/code]

最後在Form1.cpp中

[code cpp]
void __fastcall TForm1::OnDeviceMesg(TMessage &Message)
{
ShowMessage("程式有執行到這裏");
}
[/code]


整個程式在Compile的時候,都沒有發生錯誤,但我確定有訊息進來時,程式就是不會執行OnDeviceMesg....
若是各位大大有相關的經驗的話,麻煩請惠賜給小弟,小弟真的快被這個給搞瘋了....謝謝。
taishyang
站務副站長


發表:377
回覆:5486
積分:4552
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-07-30 21:26:51 IP:118.169.xxx.xxx 訂閱
小弟測試是OK的
//傳訊息給自己
void __fastcall TForm1::Button1Click(TObject *Sender)
{
SendMessage(this->Handle, WM_AD120MSG, NULL, NULL);
}

//假如是要用另外一個AP傳訊息過來
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HWND h = FindWindow(NULL, "Form1"); //"Form1"為接收端TForm的Caption屬性名稱"
if (h) {
SendMessage(h, WM_AD120, NULL, NULL);
}
}

dueseven
一般會員


發表:5
回覆:9
積分:7
註冊:2007-05-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-07-31 07:21:29 IP:140.110.xxx.xxx 訂閱
感謝 taishyang 兄的回覆,但目前我遇到的問題是訊息是由某一個Library所發出的,此Library會自動到硬體上捉取硬體的狀態,再經由Windows Message遞送出來。
廠商附的原始碼是Delphi,我有將Delphi的原始碼重新Compile過,也成功截取到訊息,但就是不知道為什麼我改寫成BCB之後,反而都進不去那個副程式。
以下是Delphi原始碼的片斷。

[code delphi]
const
WM_AD120MSG =WM_USER 210 ;
....
.....
type
TForm1 = class(TForm)
Procedure OnDeviceMsg(var msg: TMessage);
Message WM_AD120MSG;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
m_State:arraystate;
implementation

{$R *.dfm}
.....
.....

Procedure TForm1.OnDeviceMsg(var msg: TMessage);
var
nMsg :integer;
nWaparam :integer;
nChannel :integer;
lParam:integer;
i:integer;
szCallerID:ArrayString;
szDialDigit:ArrayString;
szCPUID:pchar;
szRing:string;
tagParameter :AD120DEVICEPARAMETER;
tHour:integer;
tMinute:integer;
tSecord:integer;
szTalkTime:string;
begin
nWaparam:=msg.WParam;
lParam :=msg.LParam;
nMsg := nWaparam Mod 65536 ;
nChannel :=Trunc(nWaparam / 65536 ) ;
.....
.......
end
[/code]
dueseven
一般會員


發表:5
回覆:9
積分:7
註冊:2007-05-18

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-07-31 07:40:08 IP:140.110.xxx.xxx 訂閱
已經可以了,感謝 taishyang 兄的回覆。
會進不到副程式的原因是因為我在Initial的時候,把Handle指錯位置了,真是白作了一天的工..
系統時間:2017-12-16 17:19:02
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!