利用自定义消息传递结构数据 在线等 保证立刻给分 (100分)

  • 主题发起人 主题发起人 大管家
  • 开始时间 开始时间

大管家

Unregistered / Unconfirmed
GUEST, unregistred user!
我希望达到以下目的:<br>(1)消息可以传递多种不同的信息,例如“仓库编号、仓库名称”或者“客户编号、客户名称”<br>(2)消息可以不需要指定具体的窗口接收,凡是本 EXE 内的对象(主要是DATAMODULE),能够自动判断该消息自己是否应该处理<br>(3)发出一次消息,也许会有多个对象(主要是DATAMODULE)都需要同时处理这个消息
 
如果可以做到 &nbsp;就可以降低代码的代码耦合度了
 
定义一个记录类型<br>tMsg = record<br>&nbsp; Ckbh : string[10]; &nbsp;//仓库编号<br>&nbsp; Ckmc : string[64]; &nbsp;//仓库名称<br>end;
 
我看了一些代码 , 要么是发 HWND_BROADCAST 不带数据 , 要么只能发 WM_COPYDATA 固定的消息 , 是这样的吗?<br>
 
发HWND_BROADCAST也可以带数据,但这样广播只有应用程序的顶级窗口才可以接受,而且还要注册Window消息,子窗体是收不到的。
 
其实带数据你可以将其理解为传递内存首地址,然后再传一个长度,这样无论是什么数据也可以传递了!
 
1)<br>定义一个<br>PTRecord = ^TRecord<br><br>Trecord = record<br>...<br>...<br>end;<br><br>定义一个WM_MYMESSAGE<br>在Sendmessage之前<br>New(P)<br>放进数据<br>然后<br>Sendmessage(handle,WM_MYMESSAGE, int(P), 0)<br>之后free<br><br><br>在接到WM_MYMESSAGE消息后<br>P := PTRecord(msg.wplarm).....<br>就可以操作了<br><br>2、3)<br>DATAMODULE不能接收消息<br>是从TComponent下来的
 
感谢zealothasu, 我有没有什么办法, 能让 其他的东西, 接收消息, 然后传给 DATAMODULE 呢,我不想用 TFORM ,因为他是做 UI类的,我希望逻辑类或者数据接口类可以接收消息,该怎么办?
 
你可以动态创建一个button或者放一个有handle的控件<br>然后发给他就可以了<br><br><br>不过你一定要写在数据模块里,我认为并不是很好的分离
 
看来分还是给少 &nbsp;有什么办法加分就好了
 
差点忘了<br><br>你可以在需要发送消息的地方这样<br>var<br>&nbsp; w: TMessage;<br>begin<br>&nbsp; w.Msg := WM_MYMessage;<br>&nbsp; w.WParam := 1;<br>&nbsp; w.LParam := 1;<br>&nbsp; DataModule.Dispatch(w);<br>end;<br><br>然后DataModule就可以收到消息了
 
DataModule 是要这样写吗<br>&nbsp; procedure WndProc(var Msg: TMessage); override; //接收自定义的消息<br>
 
不是<br>不是从twincontrol继承下来是不能这样的<br>这样<br>procedure s(var msg: TMessage); message WM_MYMessage;<br><br>针对某个消息写一个过程
 
明白了 &nbsp;非常感谢 &nbsp;我给分了
 
多人接受答案了。
 
后退
顶部