delphi中Message消息的使用方法
2016-05-19 11:15
351 查看
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; //命令消息处理过程
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.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');
}
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; //命令消息处理过程
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.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');
}
相关文章推荐
- 减小Delphi XE5编译出来的程序体积
- 减小Delphi2010程序的尺寸(关闭RTTI反射机制)
- DELPHI 中 Window 消息大全使用详解
- Delphi中的消息处理
- Delphi中操作INI文件
- Delphi Berlin 窗体代码分离风格 回到Delphi7传统风格
- delphi中如何将string类型的字符串数据转化成byte[]字节数组类型的数据
- Delphi Berlin 10.1 for iOS 成生 info.plist 顺序改变了
- Delphi Integer 转成单字节
- delphi const的用法
- Delphi 快捷键
- delphi中Treeview的使用介绍
- [付费视频]Delphi视频Android开发使用静态库(A)和动态库(SO)
- Delphi 释放数组中的数据
- delphi 10.1 berlin datasnap提交clientdataset.delta报:invalid variant type conversion(类型转换错误)问题的解决
- delphi中将 4 个 Byte 合成 1 个 Integer 的五种方法
- Delphi中@,^,#,$分别表示什么?
- Delphi中@,^,#,$特殊符号意义
- [Delphi] Webbroker ISAPI 示例说明
- delphi Firemonkey ListBoxItem自绘