delphi消息使用

实例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.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值