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

[delphi] view plaincopy
  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处理消息

[delphi] view plaincopy
  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.

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

[delphi] view plaincopy
  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.

转载于:https://www.cnblogs.com/chnxnghi/p/4164961.html

delphi处理消息的几种方式相关推荐

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

    本文只介绍三种方式,分别是持久化为文件,MYSql,Oracle.下面逐一介绍. A:持久化为文件 这个你装ActiveMQ时默认就是这种,只要你设置消息为持久化就可以了.涉及到的配置和代码有 < ...

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

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

  3. RocketMq 消费消息的两种方式 pull 和 push

    在RocketMQ中一般有两种获取消息的方式,一个是拉(pull,消费者主动去broker拉取),一个是推(push,主动推送给消费者) 区别是: push方式里,consumer把轮询过程封装了,并 ...

  4. RocketMq : 消费消息的两种方式 pull 和 push

    文章目录 1.概述 两种方式的优缺点对比: push pull 1.概述 原创在:https://blog.csdn.net/zhangcongyi420/article/details/905483 ...

  5. RabbitMQ(六)——Spring boot中消费消息的两种方式

    前言 上一篇博客中,我们只是简单总结了Spring boot中整合RabbitMQ的操作,针对消息消费的两种方式只是简单给了一个实例,这篇博客,我们进一步总结关于Spring boot消息消费的相关功 ...

  6. Delphi 读取文本文件的两种方式

    用两种方式读取文本文件:文件流读取和文件变量读取 一.文件流方式 {*******************************************************} {功能:读取文本文 ...

  7. MQ发送普通消息(三种方式)

    MQ 发送普通消息有三种实现方式:可靠同步发送.可靠异步发送.单向(Oneway)发送.本文介绍了每种实现的原理.使用场景以及三种实现的异同,同时提供了代码示例以供参考. 可靠同步发送 原理:同步发送 ...

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

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

  9. RabbitMQ学习(七)_RabbitMQ Consumer获取消息的两种方式(poll,subscribe)解析

    RabbitMQ中consumer通过建立到queue的连接,创建channel对象,通过channel通道获取message, Consumer可以声明式的以API轮询poll的方式主动从queue ...

最新文章

  1. Nature Plants:根系微生物可以远程提高植物应对地上部环境胁迫的能力
  2. 分布式监控报警平台Centreon之:Centreon依赖安装
  3. SSH运维总结-【liunx学习】
  4. java算法 第七届 蓝桥杯B组(题+答案) 5.抽签
  5. 【转】2.1.1 购买阿里云服务器(Ubuntu系统)
  6. LeetCode 500. 键盘行
  7. Flask 富文本编辑器
  8. Kubernetes NetworkPolicy 工作原理浅析
  9. python内置函数map/reduce/filter
  10. 别说我不告诉你,如此养车包你把自己也养穷了……
  11. 小白入门级的视频剪辑软件
  12. c语言输出成绩与排名,C语言算成绩 要求输完两个分数后 同时输出两个分数换算出来的成绩...
  13. win7 install solution for intel SKL and BSW platform
  14. letax报错“ I can't write on file `***.pdf”
  15. 怎样辨别光模块的真假?
  16. 一文弄懂责任链设计模式
  17. MPLAB IDE V8.8进行程序烧写
  18. 疫情期间再读三体(4)——杨冬之死与“终极问题”的思考
  19. return false和return true
  20. 了解HTT1/HTT2/HTT3 ?

热门文章

  1. 何谓服务器托管服务?
  2. 将***拒之门外 设置电脑防止******
  3. go加载python_人生苦短我用python(02)动态加载模块-Go语言中文社区
  4. 不是方阵有逆矩阵吗_吴恩达机器学习笔记18逆矩阵、矩阵转置
  5. python输出质数序列_用python打印素数序列
  6. 了解下WSDL 绑定
  7. 硬件基础:电阻作用及产品应用
  8. stm32难不难学,没学51单片机可以直接学STM32吗?
  9. poj2553(强连通分量)
  10. 关于学习Python的一点学习总结(36->基本序列和映射协议)