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

  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. 雷锋推到雷峰塔,Java implements Javascript。

    最近遇到这么一个问题,如何让用户在软件中自定义函数. 举个例子,使用Java做一个小的监控系统,用户A希望CPU超过90%的时候报警,B用户希望内存超过90%的时候报警,C用户希望CPU超过90%或者 ...

  2. js判断为空Null与字符串为空简写方法

    下面就是有关判断为空的简写方法.   代码如下: if (variable1 !== null || variable1 !== undefined || variable1 !== '') {  v ...

  3. UITextField总结

    ----------------- 监听文字有多长 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:( ...

  4. SpringMVC中404错误解决方法总结

    在新手配置Spring MVC的时候,感觉都弄好了之后,运行起来却显示404错误. 网上对出现404的问题不同情况,都有了解决方法,前几天我也遇到了这个问题,顺便把这些问题总结一下. 解决问题最重要的 ...

  5. 【译文】用Spring Cloud和Docker搭建微服务平台

    by Kenny Bastani Sunday, July 12, 2015 转自:http://www.kennybastani.com/2015/07/spring-cloud-docker-mi ...

  6. SignalR中长连接与HUB连接的使用方式以及区别

    1 using Microsoft.AspNet.SignalR; 2 using System; 3 using System.Collections.Generic; 4 using System ...

  7. GAME(A)性能测试过程模型

  8. [Usaco2014 Open Gold ]Cow Optics (树状数组+扫描线/函数式线段树)

    这道题一上手就知道怎么做了= = 直接求出原光路和从目标点出发的光路,求这些光路的交点就行了 然后用树状数组+扫描线或函数式线段树就能过了= = 大量的离散+模拟+二分什么的特别恶心,考试的时候是想到 ...

  9. Appuim源码剖析(Bootstrap)

    Appuim源码剖析(Bootstrap) SkySeraph Jan. 26th 2017 Email:skyseraph00@163.com 更多精彩请直接访问SkySeraph个人站点:www. ...

  10. angular、vue使用感受

    最近开始学习并使用vue.js,并使用vue+node开发了一个移动端APP来练手,下面想聊聊我对于vue的粗浅看法,并将它和angular进行一些对比: 1.vue是一个轻量.高效的前端组件化框架, ...