`

delphi中Message消息的使用方法

 
阅读更多

delphi中Message消息的使用方法

实例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 thenshowmessage(‘点击了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. 演示System.Messaging....3. 演示Delphi自带的对象Dispatch消息机制 4. 实现了传递记录体的消息机制 5. 演示了System.Messaging.TMessageManager的广播机制 6. 包含全部源代码,彻底理解Delphi的消息机制

    DELPHI POSTMESSAGE后台模拟按键源代码

    POSTMESSAGE后台模拟按键源码,可以POSTMESSAGE按键消息到其他程序中

    Delphi捕获消息的例子.rar

    在应用程序层处处理消息,重载WndProc方法,在窗口过程处处理消息,重载缺省的消息处理过程,提示一下:消息发送方法的数组,SendPostString[0]是 Send消息, SendPostString[1]是Post消息,在程序中是以判断消息结构...

    delphi message

    delphi的一些东西,希望能对人有用。

    Delphi捕获与截获消息.rar

    Delphi捕获与截获消息,  private  { Private declarations }  //在应用程序层处处理消息  procedure OnAppmessage(var msg:TMsg;var handled:boolean);  //重载WndProc方法,在窗口过程处处理消息  procedure...

    Delphi Post Send发送和屏蔽消息.rar

     消息发送方法的数组,SendPostString[0]是 Send消息, SendPostString[1]是Post消息,在程序中是以判断消息结构的 wParam字段来得到索引值的。SendMessage 时将wParam置为0,PostMessage 时将wParam置为1。

    Delphi TCPIP通信 实例 解决中文乱码问题

    敝人近期整理的客户端与服务端通信实例,数据编码约定采用UTF-8编码,解决中文乱码问题.ServerSocket组件可以同时接受一个或多个ClientSocket组件的连接请求,并与每个ClientSocket组件建立单独的连接,进行单独的...

    delphi 消息发送

    delphi 消息发送 SendMsg(AddrBox.Text,'',MessageHeader.Text+mesText.Text);

    Delphi Message Helper

    delphi对话框生成器

    Delphi Message 消息机制演示程序,这个是EXE程序,没有包含源代码。

    3. 演示Delphi自带的对象Dispatch消息机制 4. 实现了传递记录体的消息机制 5. 演示了System.Messaging.TMessageManager的广播机制 6. 源代码下载地址:https://download.csdn.net/download/sensor_WU/85056340

    Delphi 5 经典教程

    2.15.1 使用Delphi的包 56 2.15.2 包的语法 56 2.16 面向对象编程 57 2.17 使用Delphi对象 58 2.17.1 声明和实例化 58 2.17.2 析构 59 2.18 方法 59 2.18.1 方法的类型 60 2.18.2 属性 61 2.18.3 可见性表示符 62 ...

    delphi APPLICATIONEVENTs使用

    只有在应用程序消息队列中出现一个新消息时,WaitMessage函数才放弃对其他应用程序的控制。参数Done为False时,即使应用程序不忙,也不放弃对其他应用程序的控制。 当应用程序转移到空闲状态时,只调用一次OnIdle...

    Delphi中messagelag控件的使用

    Delphi7.0中messagelag控件的使用,简单的示例程序

    Delphi演示失去焦点的Edit控件.rar

    Delphi演示失去焦点的Edit控件,文字框在失去焦点后应该怎么办,Delphi7源码下载。  procedure Register;//在IDE中进行注册  begin  RegisterComponents('Samples',[Tmyedit]);  //注册到Samples页中,控件名是...

    Delphi下使用MSMQ类库实现发送和接收的类,带实例

    Message Queue(微软消息队列)是在多个不同的应用之间实现相互通信的一种异步传输模式,网上有关Delphi下使用MSMQ的文章很少,这里把平时封装的MSMQ接收类和发送类提供给大家参考,是基于MSMQ消息事件模型的,带有...

    Delphi 程序控制关闭显示器.rar

    Delphi 程序控制关闭显示器,不过我很好奇Delphi真能关闭显示器么?如果是用Delphi截断视频信号的输出,让显示器黑屏,这倒是有可能哦,但是让Delphi直接关闭显示器,有点不太可能吧?看了看代码,原来是这样:  ...

    Delphi7下Indy发送邮件示例,可以SSL发送,含和2002年的ssleay32.dll)

    示例用Delphi的Indy控件,试过用163或139邮箱发送,可以用普通端口25或SSL端口发送,可以发送附件。 内含2002年的ssleay32.dll和libeay32.dll,其它版本可能会报错“Could not load SSL library”。 smtp.163.com ...

    Delphi打开关闭外部程序并加入到Windows菜单中.rar

    Delphi打开关闭外部程序,并获取系统菜单句柄,把程序自身菜单加入到Windows菜单中,要解决这个问题,有两个工作要做:  Ⅰ:如何把用户菜单项加入系统菜单,  Ⅱ:如何才能响应这一菜单项。  解决问题Ⅰ:首先...

    DELPHI学生管理系统

    这个程序用到了网上的两个控件,一个是xpmenu,另一个是SReport6(for delphi6) 关于这两个控件的安装,相信大家都会,不过spreport6我在安装的时候发生了点问题...您盯delphi的message消息框,相信不会有太大问题:)

    Delphi5开发人员指南

    11.1.2 在Delphi程序中使用多线程 304 11.1.3 关于线程的滥用 305 11.2 TThread对象 305 11.2.1 TThread基础 305 11.2.2 TThread实例 307 11.2.3 线程的终止 307 11.2.4 与VCL同步 308 11.2.5 一个演示程序 310 ...

Global site tag (gtag.js) - Google Analytics