delphi中Message消息的使用方法

  1. unit Unit1;  
  2.   
  3. interface  
  4. uses  
  5. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;  
  6. const  
  7. WM_ME=WM_USER+100//自定义消息;  
  8. type  
  9. TForm1 = class(TForm)  
  10.     Button1: TButton;  
  11. procedure Button1Click(Sender: TObject);  
  12. //第一种消息处理方式; 只能处理常量消息;  
  13.    procedure wmme(var message:TMessage);message WM_ME; //自定义消息处理过程,专门处理WM_ME消息; private  
  14.    { Private declarations }  
  15. public  
  16. { Public declarations }  
  17. //第二种消息处理方式;可能处理常量或变量消息;  
  18. procedure WndProc(var message:TMessage);override; //重载窗口消息过程  
  19. //第三种消息处理方式  
  20.    procedure WMCommand(var Message: TWMCommand); message WM_COMMAND; //命令消息处理过程  
  21. end;  
  22. var  
  23. Form1: TForm1;  
  24. implementation  
  25. {$R *.dfm}  
  26. procedure TForm1.Button1Click(Sender: TObject);  
  27. begin  
  28.    SendMessage(Handle,WM_ME,0,0); //发送消息WM_ME ; 消息先由WndProc处理,再交给wmme处理;  
  29. end;  
  30. procedure TForm1.WMCommand(var Message: TWMCommand);  
  31. begin     //第三种消息处理方式  
  32. if Message.NotifyCode = BN_CLICKED then  
  33. if FindControl(Message.Ctl) = Button1 then showmessage(‘点击了Button1’);  
  34. inherited;  
  35. end;  
  36. procedure TForm1.wmme(var message: TMessage);  
  37. begin  
  38. ShowMessage(IntToStr(Handle)+ 'wmme'); //第一种消息处理方式  
  39. end;  
  40. procedure TForm1.WndProc(var message: TMessage);  
  41. begin  
  42.    if message.Msg=WM_ME then //第二种消息处理方式  
  43.      ShowMessage(IntToStr(Handle)+ 'WndProc');  
  44. inherited WndProc(Message); //这里inherited才会触发一次wmme消息;  
  45. end;  
  46. end.  
  47. 实例2/消息的广播方式/  
  48. ///消息广播只能将消息传递到接收消息的主程序中,MDIChild窗体不能接收到广播消息;/  
  49. unit Unit1;  
  50. interface  
  51. uses  
  52. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;  
  53. type  
  54. TForm1 = class(TForm)  
  55.     Button1: TButton;  
  56.     procedure Button1Click(Sender: TObject);  
  57.     procedure FormCreate(Sender: TObject);  
  58. private  
  59.    { Private declarations }  
  60. public  
  61.    { Public declarations }  
  62.     procedure WndProc(var message:TMessage);override;  
  63. end;  
  64. var  
  65. Form1: TForm1;  
  66. MyMessage: DWORD;  
  67. implementation  
  68. {$R *.dfm}  
  69. { TForm1 }  
  70. procedure TForm1.WndProc(var message: TMessage);  
  71. begin  
  72. if message.Msg=MyMessage then //第3步:重载Windows消息处理过程,处理接收到的MyMessage消息;  
  73. ShowMessage(FloatToStr(Handle)+ 'MyMessage');  
  74. inherited WndProc(Message);  
  75. end;  
  76. procedure TForm1.Button1Click(Sender: TObject);  
  77. begin  
  78. SendMessage(HWND_BROADCAST,MyMessage,0,0); //第2步:广播MyMessage消息;  
  79. end;  
  80. /预先注册好Windows消息;第一种方法  
  81. procedure TForm1.FormCreate(Sender: TObject);  
  82. begin  
  83. //同一字符串,如'MyMessageMe'在不同的程序中调用RegisterWindowMessage注册消息时,返回的MyMessage结果是一样的。这样为在不同程序之间广播消息提供了可能。即不同程序注册消息时,必须注册相同的注符串。  
  84.     MyMessage:=RegisterWindowMessage('MyMessageMe'); //第1步:注册Windows消息,重点在于返回的值MyMessage  
  85. end;  
  86. /预先注册好Windows消息;第二种方法  
  87. { initialization 
  88. MyMessage:=RegisterWindowMessage('MyMessageMe'); 
  89. }   
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蚂蚁_CrkRes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值