delphi处理消息的几种方式
第一种:自定义处理单条消息
- unit Unit2;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs;
- type
- TForm2 = class(TForm)
- procedure FormCreate(Sender: TObject);
- procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
- private
- { Private declarations }
- //直接用 TWMQueryEndSession
- procedure EndMsg(var nMsg: TWMQueryEndSession); Message WM_QUERYENDSESSION;
- //也可以用这种
- //procedure EndMsg(var nMsg: TMessage); Message WM_QUERYENDSESSION;
- public
- { Public declarations }
- end;
- var
- Form2: TForm2;
- implementation
- {$R *.dfm}
- //收到WM_QUERYENDSESSION消息后就会触发这个过程
- procedure TForm2.EndMsg(var nMsg: TWMQueryEndSession);
- begin
- //0 可以取消关机操作
- nMsg.Result := 1;
- ShowMessage('注销、重启、关机');
- end;
- end.
第二种:利用Application.OnMessage处理消息
- unit Unit2;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs;
- type
- TForm2 = class(TForm)
- procedure FormCreate(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- procedure OnMsg(var nMsg: tagMSG; var nHandled: Boolean);
- end;
- var
- Form2: TForm2;
- implementation
- {$R *.dfm}
- //消息处理过程
- procedure TForm2.OnMsg(var nMsg: tagMSG; var nHandled: Boolean);
- begin
- //处理……
- //这里会收到各种消息……经测试无法收到WM_QUERYENDSESSION消息
- end;
- procedure TForm2.FormCreate(Sender: TObject);
- begin
- Application.OnMessage := OnMsg;
- end;
- end.
第三种:自己处理窗口函数,个人感觉这是最强大的,可以拦截一切发往窗口的消息!
- unit Unit2;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs;
- type
- TForm2 = class(TForm)
- procedure FormCreate(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- procedure WndProc(var nMsg: TMessage); override;
- end;
- var
- Form2: TForm2;
- implementation
- {$R *.dfm}
- procedure TForm2.WndProc(var nMsg: TMessage);
- begin
- //这里能收到发往窗口的所有消息
- inherited; // 注意这句不能少
- if nMsg.Msg = WM_QUERYENDSESSION then
- begin
- if nMsg.LParam = 0 then
- ShowMessage('关机或重启')
- else
- ShowMessage('注销');
- end;
- end;
- end.
delphi处理消息的几种方式的更多相关文章
- delphi杀进程的两种方式
delphi杀进程的两种方式 uint unit Tlhelp32; 第一种:比较简单,根据标题,找到窗口,再找到进程,杀死进程 procedure KillProgram(WindowTitle : ...
- RocketMQ(6)---发送普通消息(三种方式)
发送普通消息(三种方式) RocketMQ 发送普通消息有三种实现方式:可靠同步发送.可靠异步发送.单向(Oneway)发送. 注意 :顺序消息只支持可靠同步发送. GitHub地址: https:/ ...
- ActiveMQ持久化消息的三种方式
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt362 本文只介绍三种方式,分别是持久化为文件,MYSql,Oracle.下面 ...
- Kafka生产者发送消息的三种方式
Kafka是一种分布式的基于发布/订阅的消息系统,它的高吞吐量.灵活的offset是其它消息系统所没有的. Kafka发送消息主要有三种方式: 1.发送并忘记 2.同步发送 3.异步发送+回调函数 下 ...
- Spring使用JMS传递消息的两种方式
方式一:同步收发消息,使用JMS template 消费者阻塞等待消息的到来. 方式二:异步收发消息,使用message listener container 消费者提供一个listener,注册一个 ...
- RabbitMQ Consumer获取消息的两种方式(poll,subscribe)解析
以下转自:http://blog.csdn.net/yangbutao/article/details/10395599 rabbitMQ中consumer通过建立到queue的连接,创建channe ...
- java实现MQ消息收发两种方式
定义: 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们.简单理解:蓝牙配对 jar包依赖: <!-- ...
- Delphi 调用Dll的两种方式
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System ...
- Js 在页面中输入消息的几种方式
一.方式 alert(“”); confirm(“”) ; prompt(“”); 接收用户信息 console.log(“”); 在网页控制台中输出消息 document. ...
随机推荐
- (二)Lua脚本语言入门
上一篇文章忘了插入代码了,方便粘贴复制...... 函数 对于c语言就是 void aa()//c语言是用void { print("这是一个函数") } Lua就变成了 func ...
- [html5] 学习笔记-Canvas应用
通过使用HTML5游戏开发的引擎CreatJS,创建HTML5 Canvas上的更好交互. 1.认识CreateJS CreateJS是一个外部库,用它可以比Canvas更方便的绘制图形. 官网:ht ...
- 蓝桥网试题 java 基础练习 十六进制转八进制
- -------------------------------------------------------------------------------------------------- ...
- 自己开发轻量级ORM(三)
上一篇中简单分享了下ORM的设计思路.现在开始讲如何用代码来实现上篇的设计模型. 我们建2个类库来分别抽象数据库表结构关系映射和SQL增删改查操作. 打开VS2010,新建2个类库.分别起名为Mode ...
- Struts2系列笔记(2)---Struts.XML
Struts2.xml 本篇博客主要讲Struts2.xml中package下的标签和标签属性,主要分以下四个部分说明: (1)action的配置基本属性 (2)同一个Action类中不同方法满足不同 ...
- php文件上传分类
<?php/** * 文件上传类 * @author lijiamin * @time 2017-02-17 * @email 1195989301@qq.com */class Upload{ ...
- Android基础工具函数代码集
整理在学习研究Android开发,编写了一些基本用到的工具集,现在整理分享(后续会持续更新,有问题还请指出). 1.HttpClient工具,使用Apache的HttpClient类实现get和pos ...
- Codeforces 768B Code For 1
B. Code For 1 time limit per test:2 seconds memory limit per test:256 megabytes input:standard input ...
- canvas绘图不清晰的解决方案
现象描述 同样大小的图片(60x60px)用canvas和DOM绘制,结果发现canvas的画面质量要差很多.结果如下图所示. 上图中,左侧红框中的金币采用DOM绘制,右侧和下方的金币和文字等使用ca ...
- linux下redis 集群配置
redis.conf 配置文件说明 daemonize no --是否把redis-server启动在后台,默认是“否”.若改成yes pidfile /var/run/redis.pid --当Re ...