const
SX_EXECUTE = WM_USER + 100;private
procedure SXExecute(var Msg: TMessage); message SX_EXECUTE;
procedure TExecReportForm.FormActivate(Sender: TObject);
begin
Perform(SX_EXECUTE, 0, 0);
end;procedure TExecReportForm.SXExecute(var Msg: TMessage);
begin
//
end;
procedure SXExecute(var Msg: TMessage); message SX_EXECUTE;这句话的意思是当执行Perform(SX_EXECUTE, 0, 0);的时候就执行SXExecute这个函数么?
解决方案 »
- 使用CopyMemory拷贝字符串的问题
- 在这里问一个非程序的问题.不过也很困难...希望DELPHI的朋友们能帮我解答一下...
- 急急!!!!!关于FastReport中字体旋转的问题,请各位大侠帮忙!
- 哪位仁兄可以给我解梦?闲聊也无妨--修罗散分帖
- 公司从今晚开始放假,散分贺之
- 这个问题有点怪!!!!!!!!
- 我用delph5.0编写的三层结构的程序里,不能实现调用有参数的函数
- inherited关键字有什么用啊
- 我们公司初级程序员的应试题之一,请看:
- 如何在InstallShield(不是InstallShield for delphi)中安装BDE
- 如何编辑DBGrid的内容?
- ******高手来一下吧,关于日期时间相加的问题的*****
const
WM_MSG = WM_USER + 1;二、然后在某个控件的响应函数里给windows发消息:
procedure Tfrm1.btnOKClick(Sender: TObject);
begin
PostMessage(TWinControl(Owner).HANDLE, WM_MSG, 0, Longint(Pointer(Self)));
end;
其中,PostMessage里面的LPARAM和WPARAM两个参数就是用来给响应的消息传一些参数用的,可以是窗体本身,也可以是唯一确定窗体的一些KEY。三、在接收消息的窗体里(可以不同于发消息的窗体)定义消息的响应函数:procedure WMRecvMsg(var Msg: TMessage); message WM_Msg;
var
nIndex: Integer;
begin
nIndex := FFrameList.IndexOf(Pointer(Msg.LParam));
//做消息的其他处理,这样就可以了。
end;四、这里可以用PostMessage,也可以用SendMessage。
PostMessage 和SendMessage的区别主要在于是否等待其他程序消息处理。PostMessage只是把消息放入队列,不管其他程序是否处理都返回,然后继续执行;而SendMessage必须等待其他程序处理消息后才返回,继续执行。这两个函数的返回值也不同,PostMessage的返回值表示PostMessage函数执行是否正确,而SendMessage的返回值表示其他程序处理消息后的返回值。五、相关的api函数peekmessage和getmessage的区别如下:
两个函数主要有以下两个区别:
1.GetMessage将等到有合适的消息时才返回,而PeekMessage只是撇一下消息队列。
2.GetMessage会将消息从队列中删除,而PeekMessage可以设置最后一个参数wRemoveMsg来决定是否将消息保留在队列中。