深入delphi编程理解之消息(三)发送消息函数的一般应用实例

  通过对消息函数(SendMessage、PostMessage、Perform)的一般应用,来说明sendmessage、postmessage函数和perform 方法调用方式和结果的区别。

一、程序界面

 二、程序代码及注释

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure MyWMClose(var Amessage: TWMClose); message WM_CLOSE;   {拦截关闭窗口消息}
  end;

var
  Form1: TForm1;

implementation

uses
  CommCtrl;
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  SendMessage(Edit1.Handle, WM_SETTEXT, 255, Integer(PChar(‘abc‘))); {发送字符ABC}
// Edit1.Perform(WM_SETTEXT,255,Integer(PChar(‘abc‘)));
// PostMessage(Edit1.Handle,WM_SETTEXT,255,Integer(PChar(‘abc‘)));
//SendMessage(Edit1.Handle,WM_Char,Wparam(‘Q‘),1);  {传递字符 }
end;

procedure TForm1.Button2Click(Sender: TObject);var MyBroadCastMsg:cardinal;
begin  MyBroadCastMsg:=RegeisterWindowsMessage(‘MyBroadCastMsg‘); //向系统注册消息  SendMessage(HWND_BROADCAST,MyBroadCastMsg,0,0); //向系统广播消息。
  //PostMessage(Button2.Handle, BM_SETSTYLE, BS_RADIOBUTTON, 1); //改变按钮风格
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  SendMessage(Handle, WM_CLOSE, 0, 0);  {点击按钮后 ,弹出MyWMClose函数窗口,点击取消息按后才会显示“欢迎回来”窗口;}  //Form1.Perform(WM_CLOSE, 0, 0);
 //PostMessage(Handle, WM_CLOSE, 0, 0); {点击按钮后 ,马上显示“欢迎回来”窗口,这是三个函数执行流程区别的体现。}
  ShowMessage(‘欢迎回来‘);
end;

procedure Tform1.MyWMClose(var Amessage: TWMClose);   {拦截关闭窗口消息 }
begin
  case MessageBoxW(Handle, ‘确认关闭窗口?‘, ‘提示‘, MB_OKCANCEL + MB_ICONQUESTION) of
    IDOK:
      begin
        Close;
      end;
    IDCANCEL:
      begin

      end;
  end;

end;

end.

  分析:PostMessage函数与SendMessage函数和Perform方法主要区别在执行流程上的区别,PostMessage函数就象甩手雷,只管甩,不管是不是哑弹,可以连续甩。而SendMessage函数和Perform不仅要甩,而且要等到手雷爆炸后才能甩下一个。

原文地址:https://www.cnblogs.com/LifeStartPoint/p/12207030.html

时间: 2024-08-30 07:42:44

深入delphi编程理解之消息(三)发送消息函数的一般应用实例的相关文章

微信公众平台开发学习系列(二):微信公众平台接收消息与发送消息

本篇主要介绍如何使用senparc来处理微信公众平台的接收消息与发送消息. 首先微信端会将用户的发送的信息以post请求发送到填写的url上,服务端代码如下: 1 [HttpPost] 2 public ActionResult Get(PostModel postModel) 3 { 4 var messageHandler = new CustomMessageHandler(Request.InputStream, postModel); 5 6 messageHandler.Execut

深入delphi编程理解之消息(一)WINDOWS原生窗口编写及消息处理过程

通过以sdk方式编制windows窗口程序,对理解windows消息驱动机制和delphi消息编程有很大的帮助. sdk编制windows窗口程序的步骤: 1.对TWndClass对象进行赋值; 2.向系统注册wndclass对象(RegisterClass): 3.CreateWindow创建窗口,获得窗口句柄Hwnd; 4.显示窗口(ShowWindow): 5.通过GetMessage函数不断获取系统消息,交给程序处理,程序过通回调函数(wndproc)处理系统消息.(消息处理部分)程序代

delphi 主线程向子线程发送消息

while True do begin if not PeekMessage(msg,0,0,0,PM_REMOVE) then begin case MsgWaitForMultipleObjects(1,hCloseEvent,False,INFINITE,QS_ALLINPUT) of WAIT_OBJECT_0: Break;//hCloseEvent事件已经有效,故结束 WAIT_OBJECT_0+1:Continue;//消息队列中有消息存在 else Break;//其它情况,WM

深入delphi编程理解之消息(六)无窗口单元消息的创建、接受及dispatch模式编程

一.程序界面 二.程序代码 (一).主界面代码 //============================================================================== // 主窗口 //============================================================================== unit Unit1; interface uses Windows, Messages, SysUtils, V

深入delphi编程理解之接口(一)接口与类的异同及接口的声明和实现

一.抽象类与接口的异同 接口简单的理解可认为是一个抽象类,我们先定义一个抽象类和接口来对比之间的异同,代码如下: type IFormattedNumber = interface //定义接口 function FormattedString: string; end; TFormattedNumber = class //定义抽象类 public function FormattedString: string; virtual; abstract; end; 上面定义了一个接口IForma

Oozie 生成JMS消息并向 JMS Provider发送消息过程分析

一,涉及到的工程 从官网下载源码,mvn 编译成 Eclipse工程文件: 对于JMS消息这一块,主要涉及到两个工程: oozie-core工程有问题的原因是还需要一些其他的依赖工程未导入: 二,Oozie 生成 JMS消息 主要涉及到的一些类 oozie-core 工程中的: oozie-client工程中的: 三,相关代码: 对于Oozie Server而言,它是消息的生产者.在oozie-default.xml/oozie-site.xml里面配置好连接参数,消息服务器....Oozie就

[转载]微信企业号不同消息类型发送

我们知道,企业号主要是面向企业需求而生的,因此内部消息的交流显得非常重要,而且发送.回复消息数量应该很可观,对于大企业尤其如此,因此可以结合企业号实现内部消息的交流.企业号具有关注安全.消息无限制等特点,很适合企业内部的环境.本文主要介绍如何利用企业号实现文本.图片.文件.语音.视频.图文消息等消息的发送操作. 1.企业号特点 对于企业号,有以下一些特点: 1)关注更安全 –只有企业通讯录的成员才能关注企业号,分级管理员.保密消息等各种特性确保企业内部信息的安全. 企业可以设置自行验证关注者身份

Java秒杀系统实战系列~整合RabbitMQ实现消息异步发送

摘要: 本篇博文是“Java秒杀系统实战系列文章”的第八篇,在这篇文章中我们将整合消息中间件RabbitMQ,包括添加依赖.加入配置信息以及自定义注入相关操作组件,比如RabbitTemplate等等,最终初步实现消息的发送和接收,并在下一篇章将其与邮件服务整合,实现“用户秒杀成功发送邮件通知消息”的功能! 内容: 对于消息中间件RabbitMQ,想必各位小伙伴没有用过.也该有听过,它是一款目前市面上应用相当广泛的消息中间件,可以实现消息异步通信.业务服务模块解耦.接口限流.消息分发等功能,在微

ActiveMQ发消息和收消息

来自:http://blog.163.com/chengwei_1104/blog/static/53645274201382315625329/ ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位. 下面详细的解释常用类的作用 ConnectionFactory 接口(连接工厂) 用