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

  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. BZOJ两水题连发~(BZOJ1854&&BZOJ1191)

    前言:两题都是省选题不过水的惊人,且都可以用二分图最大匹配做哎--- 1854: [Scoi2010]游戏 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: ...

  2. DTLS 技术要点解析

    一.DTLS DTLS 是指 Datagram Transport Level Security,即数据报安全传输协议: 其提供了UDP 传输场景下的安全解决方案,能防止消息被窃听.篡改.身份冒充等问 ...

  3. 支付宝ios支付请求Java服务端签名报的一个错(ALI40247) 原创

    今天做app的支付宝支付,遇到些问题,以前做支付宝支付签名都是直接在客户端App进行,今天下了最新版本ios的支付宝支付demo,运行demo时底部有红色的显眼字体,告知用户签名必须在服务端进行... ...

  4. 【鸡年大吉】,不知道写点啥,放个demo(小球碰撞)吧,有兴趣的看看

    最初的想法是仿写win7的泡泡屏保效果,但是对于小球的斜碰问题一直没搞明白(如果你会这个,欢迎留言或者做个demo),所以只是简单处理了碰撞后的速度,有时候会看起来很搞笑~~~funny guy 话不 ...

  5. HDU 2080 夹角有多大II

    夹角有多大II Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  6. IIS7出现“HTTP 错误 404.17 - Not Found 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理。”错误-Windows-

    Errore HTTP 404.2 - Not Found" IIS 7.5 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理 如果你用了安全狗,可能只看到404错误,请打开狗,资源 ...

  7. 时间处理之strtotime

    strtotime (PHP 4, PHP 5, PHP 7)strtotime - 将任何英文文本的日期时间描述解析为 Unix 时间戳说明 int strtotime ( string $time ...

  8. C++指向常量的指针和常指针

    C++指向常量的指针和常指针 指向常量的指针 通常情况下,可以通过指针去修改指针指向的内容.但是在某些情况下,只希望通过指针去访问指针指向的内容,不想修改.比如只想通过树根结点的指针去遍历输出树中所有 ...

  9. 在Angular中,如果权限值是异步请求所得,如何将其设置为HTTP请求头的Authorization?

    遇到此问题的背景:项目需要实现单点登录,在前后端分离的前提下,前台如何保存token值成为了一个问题.想到的解决方案是,将token值统一存到一个前端程序,其他的前端程序去这个前端程序去取token( ...

  10. 2017-2-20 C#基础 运算符

    C#的运算符主要分五种:算数运算符,关系运算符,逻辑运算符,条件运算符,赋值运算符.算术运算符有 + - * /  %    ++    --;关系运算符有    ==    !=    >   ...