如何编写消息响应函数(50分)

  • 主题发起人 主题发起人 nuaa.cs.zhanglu
  • 开始时间 开始时间
N

nuaa.cs.zhanglu

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟想在程序中编写对自定义的消息的响应的函数,不知应做哪些工作。<br>&nbsp;我在实验过程中,发现如果编写一个响应WINDOWS的标准消息,如WM_MOUSEMOVE,自己编写的<br>响应函数不会触发。
 
unit1 ;<br>......<br><br>form1=Class(Tform1)<br>....<br>&nbsp; public <br>&nbsp; &nbsp;procedure Myprocedure9(var msg:Tmessage) ;message wm_mousemove;<br>&nbsp;....<br>end;<br>.....<br>procedure form1.Myprocedure9(var msg:Tmessage);<br>begin &nbsp;<br>&nbsp; ...<br>&nbsp; 你的代码... &nbsp;<br>&nbsp; ...<br>end;<br><br>
 
&gt;&gt;自己编写的响应函数不会触发。<br>这是什么意思?
 
再说详细点。<br>
 
Delphi的例子有
 
你是意思是不是要写自定义消息,<br>然后截获这个消息,是吧?
 
必须要有激发的条件啊。例如用于回调或者发送一个消息啊:<br>一个简单的例子:<br>const MyMessage=WM_USER+100;<br>type<br>&nbsp; TForm1 = class(TForm)<br>&nbsp; &nbsp; Button1: TButton;<br>&nbsp; &nbsp; procedure Button1Click(Sender: TObject);<br>&nbsp; &nbsp; procedure MyMessageProc(var msg:TMessage);message MyMessage;<br>&nbsp; private<br>&nbsp; public<br>&nbsp; end;<br>var<br>&nbsp; Form1: TForm1;<br>implementation<br>{$R *.DFM}<br>procedure TForm1.Button1Click(Sender: TObject);<br>begin<br>&nbsp; sendmessage(handle,mymessage,0,0);<br>end;<br><br>procedure TForm1.MyMessageProc(var msg: TMessage);<br>begin<br>&nbsp; showmessage('fksdfds');<br>end;<br>end.
 
如果不同程序问通讯还得用RegisterWindowMessage函数。
 
那么,消息处理过程和发送消息(sendmessage)可不可以不再同一模块中呢?<br>我在一单元中,定义了消息常量和消息处理过程,为什么在另一单元中调用sendmessage<br>就得不到消息触发呢?<br>多谢!
 
看windows核心编程一书中的最后关于消息部分说明:<br>sendmessage是必须要接受消息模块处理完毕才会返回的。而postmessage不必。<br>但是这个和是否定义在一个单元无关。我曾经在两个单元中使用消息来传递信息<br>没有问题。你的sendmessage的确是向你需要的单元发送了消息嘛?<br>不妨先将一个单元的窗口名字定义好,然后findwindow再发消息<br>
 
我在一程序中用了NMUDP控件,但发现如果程序运行时无法关机,我在程序中加了以下代码,但没用?<br>procedure ExitWin(var msg: TWMQUERYENDSESSION); message WM_QUERYENDSESSION;<br><br>procedure TMainForm.EexitWin(var msg: TWMQUERYENDSESSION);<br>//关机时关闭程序<br>begin<br>&nbsp; inherited;<br>&nbsp; Close;<br>end;<br><br>
 
将Msg.result :=1再试试.如果还不行,可以再加一句Halt强行关闭退出..
 
多人接受答案了。
 
后退
顶部