delphi 如何用消息发送一个记录
3个回答
展开全部
正如Windows发送消息给应用程序窗口一样,我们偶尔也需要在应用程序的窗口和控件之间发送消息。Delphi提供了几种途径发送消息,例如Perform()方法(它不依赖Windows API)和SendMessage()、PostMessage() API函数。
(一)Perform()方法
VCL为所有的TControl派生类提供了Perform()方法:Perform()可以发送消息给任何已知对象实例的窗体或控件对象。Perform()方法有3个参数:消息、它对应的lParam和wParam,如下所示:
Function TControl1.Perform(Msg: Cardinal; wParam,lParam: Longint):Longint;
要发送一条消息给一个窗体或控件,使用下面的格式:
RetVal:=ControlName.Perform(MessageID, wParam,lParam);
Perform()是同步调用的,因此直到消息被处理完毕,才能得到返回值。Perform()方法把它的参数组合成一个TMessage记录,然后调用该对象的Dispatch()方法去发送这条消息——绕开了Windows API消息系统。
(二)SendMessage()和PostMessage() API函数
有时候需要发送消息给某个窗口,但并不知道这个窗口的Delphi对象实例。例如我们可能希望发送一条消息给一个非Delphi窗口,但是我们只有该窗口的句柄。幸运的是,Windows提供了两个API:SendMessage()和PostMessage()。这两个函数基本上是相同的,只有一点区别,区别之处在于:SendMessage()和Perform()类似,都是同步调用的,消息直接发往目的窗口,该消息被处理完毕才返回;Postmessage()是异步调用的,发送消息给Windows消息序列,然后立即返回。
SendMessage()和PostMessage()的定义如下:
Function SendMessage(hWnd:HWND;Msg:UINT;wParam:WPARAM;lParam:LPARAM): LRESULT;stdcall
Function PostMessage(hWnd:HWND;Msg:UINT;wParam:WPARAM;lParam:LPARAM): LRESULT;stdcall
上面的定义中,hwnd是消息目的地的窗口句柄,Msg是消息ID、wParam和lParam是32位附加信息。
说明:虽然SendMessage()和PostMessage()用法相近,它们各自的返回值是不同的。SendMessage()返回被处理的消息的结果值,但是PostMessage()返回的只是一个布尔值,表示是否该消息被放入到目标窗口队列中。另外一个方面,SendMessage()是同步调用的,PostMessage()是异步调用的
(一)Perform()方法
VCL为所有的TControl派生类提供了Perform()方法:Perform()可以发送消息给任何已知对象实例的窗体或控件对象。Perform()方法有3个参数:消息、它对应的lParam和wParam,如下所示:
Function TControl1.Perform(Msg: Cardinal; wParam,lParam: Longint):Longint;
要发送一条消息给一个窗体或控件,使用下面的格式:
RetVal:=ControlName.Perform(MessageID, wParam,lParam);
Perform()是同步调用的,因此直到消息被处理完毕,才能得到返回值。Perform()方法把它的参数组合成一个TMessage记录,然后调用该对象的Dispatch()方法去发送这条消息——绕开了Windows API消息系统。
(二)SendMessage()和PostMessage() API函数
有时候需要发送消息给某个窗口,但并不知道这个窗口的Delphi对象实例。例如我们可能希望发送一条消息给一个非Delphi窗口,但是我们只有该窗口的句柄。幸运的是,Windows提供了两个API:SendMessage()和PostMessage()。这两个函数基本上是相同的,只有一点区别,区别之处在于:SendMessage()和Perform()类似,都是同步调用的,消息直接发往目的窗口,该消息被处理完毕才返回;Postmessage()是异步调用的,发送消息给Windows消息序列,然后立即返回。
SendMessage()和PostMessage()的定义如下:
Function SendMessage(hWnd:HWND;Msg:UINT;wParam:WPARAM;lParam:LPARAM): LRESULT;stdcall
Function PostMessage(hWnd:HWND;Msg:UINT;wParam:WPARAM;lParam:LPARAM): LRESULT;stdcall
上面的定义中,hwnd是消息目的地的窗口句柄,Msg是消息ID、wParam和lParam是32位附加信息。
说明:虽然SendMessage()和PostMessage()用法相近,它们各自的返回值是不同的。SendMessage()返回被处理的消息的结果值,但是PostMessage()返回的只是一个布尔值,表示是否该消息被放入到目标窗口队列中。另外一个方面,SendMessage()是同步调用的,PostMessage()是异步调用的
展开全部
发送他的地址就行了
type MyRecord = Record
DD:Double
end;
pMyRecod = ^MyRecord;
postmessage(handle,message,integer(pMyRecord),0);
用的时候pMyRecord(message.wParam);
type MyRecord = Record
DD:Double
end;
pMyRecod = ^MyRecord;
postmessage(handle,message,integer(pMyRecord),0);
用的时候pMyRecord(message.wParam);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询