您的位置:首页 > 编程语言 > Delphi

初涉Delphi下Windows消息机制——程序间自定义消息实例

2010-02-05 11:43 567 查看
窗口1添加一个button。添加button双击事件,代码如下:

const
MY_MESSAGE=WM_USER+100;
var
Form1: TForm1;
hd:Thandle;
implementation
{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject);
begin
hd:=FindWindow('TmyFORM1','myForm1');
if hd<>0 then
begin
PostMessage (Hd, MY_MESSAGE, 0,0);
end
else
showmessage('找不到窗口myForm1');
end;


FindWindow是根据窗口标题和窗口类来获得窗口的句柄。

接受端新建一个工程,窗口命名为myForm1。代码如下:

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
const
MY_MESSAGE=WM_USER+100;
type
TmyForm1 = class(TForm)
private
{ Private declarations }
procedure mymessage(var mymsg:TMessage);message MY_MESSAGE;
public
{ Public declarations }
end;
var
myForm1: TmyForm1;
implementation
procedure TmyForm1.mymessage(var mymsg:TMessage);
begin
showmessage('收到');
inherited;
end;
{$R *.dfm}
end.


然后运行发送端程序和接受端程序,点击发送端按扭,接受端程序就会弹出一个对话框。

这儿使用的是PostMessage,会发现,不管已弹出的对话框有没有关闭,按钮依然可以继续点击,继续弹出对话框。

如果现在换成SendMessage,那第一次点击按钮,弹出一个对话框。但此时发送端不能再点击了,除非关闭了对话框,才可以进行下一次的消息发送。

这就是PostMessage和SendMessage的区别,PostMessage是发送信息,然后直接返回进行其他操作,而SendMessage则是等待消息处理程序结束了,才进行其他操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: