Z
zhiping
Unregistered / Unconfirmed
GUEST, unregistred user!
我遍屏幕报护程序时需要侦测鼠标及键盘的动做以结束程序.<br>我定义了application.onmessage指向的过程.程序如下<br>procedure Tfmrun.FormCreate(Sender: TObject);<br><br>begin<br> .........<br> application.OnMessage:=fmrun.opratedetect;<br> ............<br>end.<br> procedure tfmrun.opratedetect (var Msg:TMsg;<br> var Handled:boolean);<br> var x,y:Integer;<br><br> begin<br> case Msg.message of<br> WM_MOUSEMOVE : begin<br> //以下为鼠标消息,oldpt为已保存鼠标位置<br> x := Abs(loWord(Msg.lParam)-oldpt.x);<br> y := Abs(HiWord(Msg.lParam)-oldpt.y);<br> if (x >10) or (y >10) then Close; end;<br><br> WM_LBUTTONDOWN : Close;<br> WM_MBUTTONDOWN : Close; //按下鼠标中键<br> WM_RBUTTONDOWN : Close; //按下鼠标右键<br> WM_KEYDOWN : Close; //以下为键盘消息<br> WM_KEYUP : Close;<br> WM_SYSKEYDOWN : Close;<br> WM_SYSKEYUP : Close;<br> end;<br><br> end;<br>但出现了一个问题就是图形在缓慢推出时(即程序在运行其他任务时)按键盘或<br>鼠标没有反应直到图片显示完之后才响应,结束程序.我查了help好象onmessage<br>只处理消息列队中的消息不能马上处理消息的响应.但由于我没有学过windows消<br>息机制及delphi中的消息实现因此不是从实质上清楚更不知道如何改进.每当遇到消息<br>的处理时总很苦恼.借此机会想让大虾们给讲一讲windows消息机制及delphi中的<br>消息实现尤其是后者的原理.想必也有许多象我一样迷茫的初学者也想知道.顺便也把<br>上面的问题给出一个答复使得程序能够马上响应操作而结束. 我仅有的分吐血奉上.