关于消息的发送与接收(50分)

  • 主题发起人 主题发起人 wlq
  • 开始时间 开始时间
W

wlq

Unregistered / Unconfirmed
GUEST, unregistred user!
由form2向form1发送消息:
1。首先在form1中定义消息及相应的消息处理过程:
WM_Comm=WM_user+100;
type
TmyMsg=record
msgId:cardinal;
msgContent:string;
end;
type
Tform1=class(Tform)
.....
private
message:Tmymessage;
procedure CommProc(var message:TmyMessage):message WM_comm;
end;
2.随后,在form2中发送消息:
message.msgId:=10;
message.msgContent:='aa';
postmessage(form1.handle,WM_Comm,0,0);//我还试过去掉form2,在form1中传送消息,同样不成功,跟踪发现消息结构被正确赋值,但到了form1的消息处理过程中就变了样。。。

跟踪发现收到的消息如下:
msgid:1036
msgcontent:''
是何原因,恳请各位大侠赐教!谢谢!:)
 
顺便加一句,我本来是想做这样一个东西:建立了一个线程,监视几个事件,一旦
该事件置位(setevent),就向主窗体发送相应的消息,程式在这里卡了壳,心里非常着急,希望得到各位大侠的悉心点拨,小弟真的感激不尽!(再叩首!)
 
消息定义错了procedure CommProc(var message:TmyMessage):message WM_comm;
应该为procedure CommProc(var message:TMessage):message WM_comm;

windows的消息类型不能随便定义,只能是TMessage,如果你要想在程序中传字符串,应该用wm_copydata.
如果你需要例子,可以给我发mail hubdog@Chinaren.com(因为最近论坛太慢)


 
; procedure MMLogMessage(var pMsg: TMessage); message mm_LogMemoMessage;

procedure TForm1.MMLogMessage(var pMsg: TMessage);
begin
mmLog.Lines.Add(MemoMessage);
if ((mmLog.Lines.Count mod 50) = 0) and (mmLog.Lines.Count > 0) then
mmLog.Lines.SaveToFile(LogFileName);
MemoCriticalSection.Leave;
Application.ProcessMessages;
end;

In other unit

Const
mm_LogMemoMessage = wm_User + 101;

procedure LogMemoMessage(const pMsg: string);
var
MemoMessage: String;
MemoCriticalSection: TCriticalSection;

procedure LogMemoMessage(const pMsg: string);
begin
//window
MemoCriticalSection.Enter;
MemoMessage := pMsg;
SendMessage(Application.MainForm.Handle, mm_LogMemoMessage, 0, 0);
end;

This is a part of my application.
You can try
Good luck to you
 
如果你在CommProc中跟踪,MsgID应该为1124.
Message的基本格式为
TMessage = packed record
Msg: Cardinal;
case Integer of
0: (
WParam: Longint;
LParam: Longint;
Result: Longint);
1: (
WParamLo: Word;
WParamHi: Word;
LParamLo: Word;
LParamHi: Word;
ResultLo: Word;
ResultHi: Word);
end;
如果你想通过消息传送数据,只需在
PostMessage(handle,WM_COMM,WParam, LParam)中的WParam和LParam
中赋值.
取值只需在CommProc中message.Wparam和message.LParam中取.
 
Hi,我是wlq,好几天没来了!
我在的网这几天正在搞改造,不过我看是越改越慢,一连三天论坛根本上不去,
早上三点居然都能掉线 :(
to hudog:您的程序收到了,不过有些地方不大懂,准备明天找老师打印出来
仔细学习。
to guo_gpeter and linzg:刚刚看到你们的回答,使我很受启发,非常感谢你
们!(不好意思,总共只有50分)
看了各位的答案,我才发现自己犯了一个严重的低级错误!我混淆了 Tmessage
和Tmsg这两个概念,我一直以为Tmsg是 Tmessage的缩写!(脸红)
让各位费心了,谢谢!
 
后退
顶部