实例1

unit Unit1;

interface
 
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
 
 const
WM_ME=WM_USER+100; //自定义消息;
 type
 TForm1 = class(TForm)
    Button1: TButton;
procedure  Button1Click(Sender: TObject);
//第一种消息处理方式; 只能处理常量消息;
    procedure  wmme(var message:TMessage);message WM_ME; //自定义消息处理过程,专门处理WM_ME消息; private
   { Private declarations }
 public
{ Public declarations }
//第二种消息处理方式;可能处理常量或变量消息;
procedure  WndProc(var message:TMessage);override; //重载窗口消息过程
//第三种消息处理方式
    procedure  WMCommand(var Message: TWMCommand); message WM_COMMAND; //命令消息处理过程
    procedure WMSysCommand(var Msg:TWMSysCommand);message WM_SYSCOMMAND; //处理系统性消息;
 end;
var
 Form1: TForm1;
implementation
{$R *.dfm}
 
procedure  TForm1.Button1Click(Sender: TObject);
begin
   SendMessage(Handle,WM_ME,0,0); //发送消息WM_ME ; 消息先由WndProc处理,再交给wmme处理;
end;
 
procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
begin
  //下面代码的作用是,用户如果点击了标题栏上的最小化和关闭按钮,则隐藏窗体。
  if (Msg.CmdType=SC_MINIMIZE) or (Msg.CmdType=SC_CLOSE) then
  begin
    Self.Hide;
  end else
  DefaultHandler(Msg); //这句的作用是继续处理其它消息;
end;
 
procedure  TForm1.WMCommand(var Message: TWMCommand);
begin     //第三种消息处理方式
if Message.NotifyCode = BN_CLICKED  then
if FindControl(Message.Ctl) = Button1 then showmessage(‘点击了Button1’);
inherited;
end;
 
procedure  TForm1.wmme(var message: TMessage);
begin
 ShowMessage(IntToStr(Handle)+ 'wmme'); //第一种消息处理方式
end;
 
procedure  TForm1.WndProc(var message: TMessage);
begin
   if message.Msg=WM_ME then //第二种消息处理方式
     ShowMessage(IntToStr(Handle)+ 'WndProc');
 inherited WndProc(Message); //这里inherited才会触发一次wmme消息;
end;
end.
 
实例2/////////////////////////////////////////////////////////////消息的广播方式/////////////////////////////////////////////////////////////////////////////
///////消息广播只能将消息传递到接收消息的主程序中,MDIChild窗体不能接收到广播消息;/////////
unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
 TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
 private
    { Private declarations }
 public
    { Public declarations }
    procedure WndProc(var message:TMessage);override;
 end;
var
 Form1: TForm1;
 MyMessage: DWORD;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.WndProc(var message: TMessage);
begin
 if message.Msg=MyMessage then //第3步:重载Windows消息处理过程,处理接收到的MyMessage消息;
 ShowMessage(FloatToStr(Handle)+ 'MyMessage');
 inherited WndProc(Message);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
 SendMessage(HWND_BROADCAST,MyMessage,0,0); //第2步:广播MyMessage消息;
end;
/////////预先注册好Windows消息;第一种方法////////////////////
procedure TForm1.FormCreate(Sender: TObject);
begin
 //同一字符串,如'MyMessageMe'在不同的程序中调用RegisterWindowMessage注册消息时,返回的MyMessage结果是一样的。这样为在不同程序之间广播消息提供了可能。即不同程序注册消息时,必须注册相同的注符串。
    MyMessage:=RegisterWindowMessage('MyMessageMe'); //第1步:注册Windows消息,重点在于返回的值MyMessage
end;
/////////预先注册好Windows消息;第二种方法////////////////////
{ initialization
 MyMessage:=RegisterWindowMessage('MyMessageMe');
}
 
 
//BroadcastSystemMessage,可以在进程之间广播消息;
procedure TForm1.SendSMSMessage;
var
  SMSMessage:Cardinal;
  recipt:Cardinal;
begin
 try
  SMSMessage:=RegisterWindowMessage('SendSMSMessage');
  recipt:=BSM_ALLDESKTOPS; //所以桌面程序都可以接收
  BroadcastSystemMessage(BSF_POSTMESSAGE,@recipt,SMSMessage,0,0);
 except
 end;
end;
 
end.

delphi中Message消息的使用方法的更多相关文章

  1. Delphi中Message消息的三种使用方法(覆盖WndProc,覆盖消息函数,改写WMCommand)

    实例1 unit Unit1; interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Fo ...

  2. delphi中Time消息的使用方法

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  3. Delphi中TStringList类常用属性方法详解

    TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的. 常规的用法大家都知道,现在来讨论它的一些高级的用法. 先把要讨论的几个属性列出来: 1.CommaText 2.Delim ...

  4. Delphi中的消息截获(六种方法:Hook,SubClass,Override WndProc,Message Handler,RTTI,Form1.WindowProc:=@myfun)good

    Windows是一个基于消息驱动的系统,因此,在很多时候,我们需要截获一些消息然后自己进行处理.而VCL系统又有一些特定的消息.下面对我所了解的delphi环境中截获消息进行一些总结.      就个 ...

  5. Delphi中window消息截获的实现方式(2)

    Delphi是Borland公司提供的一种全新的WINDOWS编程开发工具.由于它采用了具有弹性的和可重用的面向对象Pascal(object-orientedpascal)语言,并有强大的数据库引擎 ...

  6. Delphi中的消息 (转载)

    消息是Windows发出的一个通知,它告诉应用程序某个事件发生了.在Delphi中,大多数情况下Windows的消息被封装在VCL的事件中,我们只需处理相应的VCL事件就可以了,但如果我们需要编写自己 ...

  7. Delphi中文件流的使用方法

    在Delphi中,所有流对象的基类为TStream类, 其中定义了所有流的共同属性和方法.TStream类中定义的属性介绍如下: 1.Size: 此属性以字节返回流中数据大小. 2.Position: ...

  8. delphi中使用自定义资源的方法

    如果要在delphi中使用自定义资源文件*.res文件,比如一个光标,此时可以采用下列步骤: 1,创建包含相应的资源文件,这里是创建一个包含自定义光标的res文件. 2,在主窗体的pas文件中加入编译 ...

  9. Floodlight 中创建消息对象的方法

            在 floodlight 中创建各种openflow message 和 action 等採用的是简单工厂方式.BasicFactory类(实现OFMessageFactory接口.) ...

随机推荐

  1. SqlServer和MySQL游标学习

    一 sqlserver游标使用 /*** 游标的使用  讲了这个多游标的优点,现在我们就亲自来揭开游标的神秘的面纱.  使用游标的顺序: 声名游标.打开游标.读取数据.关闭游标.删除游标. 1.3.1 ...

  2. apache下自定义404错误页面

    404页面的目的是:告诉浏览者其所请求的页面不存在或链接错误,同时引导用户使用网站其他页面而不是关闭窗口离开. 很多开源系统包括CMS系统.Blog系统等不提供404页面或提供的404页面并未达到SE ...

  3. HTTP Referer 防外链

    HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理. if (Req ...

  4. android 面试总结,后续注意学习

    1.数据结构和算法 一般情况下,工作中是用不到的,但是就是问,每个公司都问,而且有的公司还问的特别深,还让你手写代码.我觉得这个确实有点恶心,我个人也是很讨厌算法的,但是真是没办法,人家就问,你说怎么 ...

  5. DOMContentLoaded和load

    /* * IE9以及现代浏览器新增了一个DOM构建完毕的事件DOMContentLoaded, * 这个事件触发的时间要比load快, * 因为这个事件只涉及DOM的构建,不涉及其他资源的加载. * ...

  6. C#面向对象的三大特性

    下面是面向对象的本人解析的图片可以让你们更好的理解一下!!! 一,封装: 我们可以把世界上任何一个东西都看作为一个对象,那么我们这里以人为例,一个人就肯定是一个对象了.那么封装是什么呢?封装就是这个人 ...

  7. hdu 2079

    ps:昨天刚做了个母函数的,觉得不太熟,今天又是母函数..很好.. 代码: #include "stdio.h" #include "string.h" ]; ...

  8. magento jQuery冲突N种方法

    在做修改模板的时候在page中加入jquery库发现原本自带的js冲突 商品无法加入购物车,很多js都没有效果 这是jQuery和magento自带prototype的冲突解决版本有很多种,说个简单点 ...

  9. day15_集合第一天

    1.集合体系 红色为今天所学 Collection                          (接口)|--List                       (接口) 元素有序,可以重复 ...

  10. day12_API第二天

    1.Scanner注意问题 1.Scanner中方法                   next() -- 查找并返回来自此扫描器的下一个完整标记.           nextLine() -- ...