文档章节

学习 Message(7): OnMessage 只相应消息队列中的消息

涂孟超
 涂孟超
发布于 2014/09/26 15:31
字数 353
阅读 4
收藏 0

Perform、SendMessage 会直接发送消息到窗体过程;

PostMessage 是把消息放入消息队列.

因为 Application.OnMessage 只接收队列中的消息,
所以 Perform、SendMessage 发送的消息, OnMessage 收不到.

测试如下:
代码文件:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, AppEvnts, StdCtrls;

type
  TForm1 = class(TForm)
    ApplicationEvents1: TApplicationEvents;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{通过 ApplicationEvents1.OnMessage 接受鼠标双击窗体的消息; 可以双击窗体一试}
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
  if Msg.message = WM_LBUTTONDBLCLK then
  begin
    ShowMessage('WM_LBUTTONDBLCLK');
    Handled := True;
  end;
end;

{通过 Perform 向窗体发送 WM_LBUTTONDBLCLK 消息; OnMessage 收不到}
procedure TForm1.Button1Click(Sender: TObject);
begin
  Self.Perform(WM_LBUTTONDBLCLK, 0, 0);
end;

{通过 SendMessage 向窗体发送 WM_LBUTTONDBLCLK 消息; OnMessage 收不到}
procedure TForm1.Button2Click(Sender: TObject);
begin
  SendMessage(Self.Handle, WM_LBUTTONDBLCLK, 0, 0);
end;

{通过 PostMessage 向窗体发送 WM_LBUTTONDBLCLK 消息; OnMessage 可以收到}
procedure TForm1.Button3Click(Sender: TObject);
begin
  PostMessage(Self.Handle, WM_LBUTTONDBLCLK, 0, 0);
end;

end.

 
 
 
 
 

 

 

  
窗体文件:
object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 145
  ClientWidth = 255
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Button1: TButton
    Left = 8
    Top = 97
    Width = 75
    Height = 25
    Caption = 'Button1'
    TabOrder = 0
    OnClick = Button1Click
  end
  object Button2: TButton
    Left = 89
    Top = 97
    Width = 75
    Height = 25
    Caption = 'Button2'
    TabOrder = 1
    OnClick = Button2Click
  end
  object Button3: TButton
    Left = 170
    Top = 97
    Width = 75
    Height = 25
    Caption = 'Button3'
    TabOrder = 2
    OnClick = Button3Click
  end
  object ApplicationEvents1: TApplicationEvents
    OnMessage = ApplicationEvents1Message
    Left = 128
    Top = 24
  end
end

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2008/10/28/1321490.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
EJB系列 - 消息与MDB

本人博客文章网址:https://www.peretang.com/basic-knowledge-of-message-driven-bean/ 什么是消息 松散耦合的异步通信过程 1. 面向消息的中间件(MOM): 消息发送者称为生产者; 存储消息的位置...

PereTang
2017/06/27
0
0
rabbitMQ 在spring 的使用

一、准备工作 maven依赖 创建配置文件spring-rabbitmq.xml 二、配置消息生产者 1、配置连接 注:该配置还有publisher-confirms、publisher-returns等参数,用于消息确认。 2、配置admin:pro...

狼王黄师傅
01/22
0
0
redis实现消息队列的若干疑惑

相关疑惑 1.发布者如何知道订阅者是否知道消息 2.如果只有部分订阅者接收到消息,发布者应该如何处理 redis消息队列 利用redis的pub/sub实现消息队列,当然也可以使用redis的队列实现,只不是...

OSC屠夫
2015/07/28
0
0
Apache ActiveMQ Queue Topic 详解

一、特性及优势 1、实现 JMS1.1 规范,支持 J2EE1.4以上 2、可运行于任何 jvm和大部分 web 容器(ActiveMQ works great in any JVM) 3、支持多种语言客户端(java, C, C++, AJAX, ACTIONSCR...

蔡少东
2015/01/12
0
0
Spring AMQP 源码分析MessageListener

准备 ## 目标 了解 Spring AMQP 如何实现异步消息投递(推模式) ## 前置知识 《RabbitMQ入门05多线程消费同一队列》 ## 相关资源 Quick Tour for the impatient:http://docs.spring.io/spr...

writeademo
2018/08/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

rabbitmq安装教程

RabbitMQ有Windows与Linux版本的,这里先写Windows版本的安装。 以前安装软件总是在百度上找某某安装教程,结果能按照教程安装好的软件真的不多。想起先前以为大牛说的一句话,去官网按照官网...

em_aaron
今天
5
0
Android 贝塞尔曲线实践——波浪式运动

一、波浪效果如下 贝塞尔曲线自定义波浪效果的案例很多,同样方法也很简单,大多数和本案例一样使用二次贝塞尔曲线实现,同样还有一种是PathMeasure的方式,这里我们后续补充,先来看贝塞尔曲...

IamOkay
今天
2
0
Nmap之防火墙/IDS逃逸

选项 解释 -f 报文分段 --mtu 指定偏移大小 -D IP欺骗 -sI 原地址欺骗 --source-port 源端口欺骗 --data-length 指定发包长度 --randomize-hosts 目标主机随机排序 --spoof-mac Mac地址欺骗 ...

Frost729
今天
2
0
带你搭一个SpringBoot+SpringData JPA的环境

不知道大家对SpringBoot和Spring Data JPA了解多少,如果你已经学过Spring和Hibernate的话,那么SpringBoot和SpringData JPA可以分分钟上手的。 其实我在学完SpringBoot和SpringData JPA了之...

java菜分享
今天
7
0
Chocolatey 在Window搭建一个开发环境

在看了(利用 Chocolatey 快速在 Windows 下搭建一个开发环境)后,准备从零开始 一、准备工作 1、用管理员权限启动:powershell,执行错误请参考(PowerShell因为在此系统中禁止执行脚本的解...

近在咫尺远在天涯
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部