第一种:自定义处理单条消息

  1. unit Unit2;
  2. interface
  3. uses
  4. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5. Dialogs;
  6. type
  7. TForm2 = class(TForm)
  8. procedure FormCreate(Sender: TObject);
  9. procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  10. private
  11. { Private declarations }
  12. //直接用 TWMQueryEndSession
  13. procedure EndMsg(var nMsg: TWMQueryEndSession); Message WM_QUERYENDSESSION;
  14. //也可以用这种
  15. //procedure EndMsg(var nMsg: TMessage); Message WM_QUERYENDSESSION;
  16. public
  17. { Public declarations }
  18. end;
  19. var
  20. Form2: TForm2;
  21. implementation
  22. {$R *.dfm}
  23. //收到WM_QUERYENDSESSION消息后就会触发这个过程
  24. procedure TForm2.EndMsg(var nMsg: TWMQueryEndSession);
  25. begin
  26. //0 可以取消关机操作
  27. nMsg.Result := 1;
  28. ShowMessage('注销、重启、关机');
  29. end;
  30. end.

第二种:利用Application.OnMessage处理消息

  1. unit Unit2;
  2. interface
  3. uses
  4. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5. Dialogs;
  6. type
  7. TForm2 = class(TForm)
  8. procedure FormCreate(Sender: TObject);
  9. private
  10. { Private declarations }
  11. public
  12. { Public declarations }
  13. procedure OnMsg(var nMsg: tagMSG; var nHandled: Boolean);
  14. end;
  15. var
  16. Form2: TForm2;
  17. implementation
  18. {$R *.dfm}
  19. //消息处理过程
  20. procedure TForm2.OnMsg(var nMsg: tagMSG; var nHandled: Boolean);
  21. begin
  22. //处理……
  23. //这里会收到各种消息……经测试无法收到WM_QUERYENDSESSION消息
  24. end;
  25. procedure TForm2.FormCreate(Sender: TObject);
  26. begin
  27. Application.OnMessage := OnMsg;
  28. end;
  29. end.

第三种:自己处理窗口函数,个人感觉这是最强大的,可以拦截一切发往窗口的消息!

  1. unit Unit2;
  2. interface
  3. uses
  4. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5. Dialogs;
  6. type
  7. TForm2 = class(TForm)
  8. procedure FormCreate(Sender: TObject);
  9. private
  10. { Private declarations }
  11. public
  12. { Public declarations }
  13. procedure WndProc(var nMsg: TMessage); override;
  14. end;
  15. var
  16. Form2: TForm2;
  17. implementation
  18. {$R *.dfm}
  19. procedure TForm2.WndProc(var nMsg: TMessage);
  20. begin
  21. //这里能收到发往窗口的所有消息
  22. inherited; // 注意这句不能少
  23. if nMsg.Msg = WM_QUERYENDSESSION then
  24. begin
  25. if nMsg.LParam = 0 then
  26. ShowMessage('关机或重启')
  27. else
  28. ShowMessage('注销');
  29. end;
  30. end;
  31. end.

delphi处理消息的几种方式的更多相关文章

  1. delphi杀进程的两种方式

    delphi杀进程的两种方式 uint unit Tlhelp32; 第一种:比较简单,根据标题,找到窗口,再找到进程,杀死进程 procedure KillProgram(WindowTitle : ...

  2. RocketMQ(6)---发送普通消息(三种方式)

    发送普通消息(三种方式) RocketMQ 发送普通消息有三种实现方式:可靠同步发送.可靠异步发送.单向(Oneway)发送. 注意 :顺序消息只支持可靠同步发送. GitHub地址: https:/ ...

  3. ActiveMQ持久化消息的三种方式

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt362 本文只介绍三种方式,分别是持久化为文件,MYSql,Oracle.下面 ...

  4. Kafka生产者发送消息的三种方式

    Kafka是一种分布式的基于发布/订阅的消息系统,它的高吞吐量.灵活的offset是其它消息系统所没有的. Kafka发送消息主要有三种方式: 1.发送并忘记 2.同步发送 3.异步发送+回调函数 下 ...

  5. Spring使用JMS传递消息的两种方式

    方式一:同步收发消息,使用JMS template 消费者阻塞等待消息的到来. 方式二:异步收发消息,使用message listener container 消费者提供一个listener,注册一个 ...

  6. RabbitMQ Consumer获取消息的两种方式(poll,subscribe)解析

    以下转自:http://blog.csdn.net/yangbutao/article/details/10395599 rabbitMQ中consumer通过建立到queue的连接,创建channe ...

  7. java实现MQ消息收发两种方式

    定义: 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们.简单理解:蓝牙配对 jar包依赖: <!-- ...

  8. Delphi 调用Dll的两种方式

    unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System ...

  9. Js 在页面中输入消息的几种方式

    一.方式 alert(“”); confirm(“”) ; prompt(“”);         接收用户信息 console.log(“”);      在网页控制台中输出消息 document. ...

随机推荐

  1. (@WhiteTaken)设计模式学习——抽象工厂模式

    抽象工厂模式,可以向客户端提供一个接口,而客户端不用指定具体的类型创建对象,却能够创建多个产品族(一类具有共性产品,如地域等)的对象. 下面直接上代码. 1.苹果需要实现水果的接口,而苹果可以有北方的 ...

  2. HTML__post 和 get区别【URL】

    一.get和post的区别: 表单提交中get和post方式的区别有5点 1.get是从服务器上获取数据,post是向服务器传送数据. 2.get是把参数数据队列加到提交表单的ACTION属性所指的U ...

  3. (转)JAVA的整型与字符串相互转换

    JAVA的整型与字符串相互转换1如何将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); 或         ...

  4. Android Studio --“Cannot resolve symbol” 解决办法

    鼠标放上去后显示 “Cannot resolve symbol XXX”,重启 Android Studio,重新 sync gradle,Clean build 都没有用. 多半是因为 Androi ...

  5. node.js爬虫杭州房产销售及数据可视化

    现在年轻人到25岁+,总的要考虑买房结婚的问题,2016年的一波房价大涨,小伙伴们纷纷表示再也买不起上海的房产了,博主也得考虑考虑未来的发展了,思考了很久,决定去杭州工作.买房.定居.生活,之前去过很 ...

  6. PhpCms_V9笔记

     一.建立虚拟站点 1.先更改www目录下的站点名称,再找到apache, 打开"Apache2\conf\extra"下的"httpd-vhosts.conf" ...

  7. Bootstrap记录

    左侧 导航下拉: <li class="dropdown"> <a href="#" class="dropdown-toggle& ...

  8. ubuntu12.04下安装pptp_vpn服务器

    1.下载安装apt-get install pptpd 2.配置/etc/pptpd.confvim /etc/pptpd.conf添加下面两行(在配置文件的最后取消注释修改IP即可)localip ...

  9. 深度神经网络(DNN)的正则化

    和普通的机器学习算法一样,DNN也会遇到过拟合的问题,需要考虑泛化,这里我们就对DNN的正则化方法做一个总结. 1. DNN的L1&L2正则化 想到正则化,我们首先想到的就是L1正则化和L2正 ...

  10. 在Azure上部署带有GPU的深度学习虚拟机

    1. 登录https://portal.azure.com 2. 点击"+创建",在弹出的页面搜索"deep learning toolkit for the DSVM& ...