消息发送问题!(100分)

  • 主题发起人 主题发起人 coolmyf
  • 开始时间 开始时间
C

coolmyf

Unregistered / Unconfirmed
GUEST, unregistred user!
我在学习用API编写小的执行程序,有一些问题我不太明白,就是当我建立了<br>窗口以后,执行消息循环的时候,我如何发送一个自己定义的消息呢?我学编<br>的程序是不用构件的,那么在程序中什么位置发送消息?回调函数又如何处理<br>自定义的消息呢?最好能给我例程,谢谢!
 
PostMessage or SendMessage
 
给你一个简单的例子吧<br>unit Unit1;<br><br>interface<br><br>uses<br>&nbsp; Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br>&nbsp; Dialogs, StdCtrls;<br>const MY_MSG=WM_USER+100; &nbsp;//先自己定义一个自己的消息<br>type<br>&nbsp; TForm1 = class(TForm)<br>&nbsp; &nbsp; Button1: TButton;<br>&nbsp; &nbsp; procedure Button1Click(Sender: TObject);<br>&nbsp; private<br>&nbsp; &nbsp; { Private declarations }<br>&nbsp; &nbsp; procedure MYMSG(var Msg:TMsg);message MY_MSG; &nbsp;//注意格式<br>&nbsp; public<br>&nbsp; &nbsp; { Public declarations }<br>&nbsp; end;<br><br>var<br>&nbsp; Form1: TForm1;<br><br>implementation<br><br>{$R *.dfm}<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>begin<br>&nbsp; &nbsp;SendMessage(Handle,MY_MSG,0,0); //调用sendmessage来发送你自定义的的消息<br>end;<br>procedure TForm1.MYMSG(var MSG:TMsg); &nbsp;//响应消息事件<br>begin<br>&nbsp; ShowMessage('Test');<br>end;<br><br>end.<br>
 
看看相关的<br>http://www.delphibbs.com/delphibbs/dispq.asp?LID=676170
 
如果创建了窗口的话就在窗口过程中响应自己的消息<br>否则就在消息循环中写代码。<br>下面是我以前写的一个程序中的主窗口过程:<br>function WindowProc(HWnd, uMsg, WParam, LParam: Integer): Integer; stdcall;<br>begin<br>&nbsp; if (uMsg = WM_HOTKEY) and (wParam = 1) then //响应自定义热键<br>&nbsp; begin<br>&nbsp; &nbsp; //;<br>&nbsp; end;<br>&nbsp; if uMsg = WM_TIMER then //响应计时器<br>&nbsp; begin<br>&nbsp; &nbsp; TimerEvent;<br>&nbsp; end;<br><br>&nbsp; if uMsg = WM_DESTROY then //退出程序<br>&nbsp; begin<br>&nbsp; &nbsp; KillTimer(Handle, FTimer);<br>&nbsp; &nbsp; Halt;<br>&nbsp; end;<br><br>&nbsp; Result := DefWindowProc(HWnd, uMsg, WParam, LParam); //调用默认窗口过程<br>end;<br>
 
对了,我忘了告诉大家了,我用的纯API函数,没有任何窗体和构件!
 
同意xianjun,没有窗体和控件的话,我想知道你通过什么东西来触发你的<br>自定义消息?
 
我就是想问这个问题啊?请大家帮忙了!
 
我是用API创建的窗体!
 
比如你创建了一个菜单或按钮,当你用鼠标点击你的菜单项或按钮的时候用<br>PostMessage发送你自己定义的消息就可以了
 
多人接受答案了。
 
后退
顶部