delphi中Message消息的使用方法

實例1 ide

unit Unit1;spa

interfaceorm

uses進程

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

 

 constci

WM_ME=WM_USER+100; //自定義消息;字符串

 typeit

 TForm1 = class(TForm)io

    Button1: TButton;ast

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.

相關文章
相關標籤/搜索