第一种:自定义处理单条消息
- unit Unit2;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs;
-
- type
- TForm2 = class(TForm)
- procedure FormCreate(Sender: TObject);
- procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
- private
-
-
- procedure EndMsg(var nMsg: TWMQueryEndSession); Message WM_QUERYENDSESSION;
-
-
- public
-
- end;
-
- var
- Form2: TForm2;
-
- implementation
-
- {$R *.dfm}
-
- procedure TForm2.EndMsg(var nMsg: TWMQueryEndSession);
- begin
-
- nMsg.Result := 1;
- ShowMessage(‘注销、重启、关机‘);
- end;
-
- end.
第二种:利用Application.OnMessage处理消息
- unit Unit2;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs;
-
- type
- TForm2 = class(TForm)
- procedure FormCreate(Sender: TObject);
- private
-
-
- public
-
- procedure OnMsg(var nMsg: tagMSG; var nHandled: Boolean);
- end;
-
- var
- Form2: TForm2;
-
- implementation
-
- {$R *.dfm}
-
- procedure TForm2.OnMsg(var nMsg: tagMSG; var nHandled: Boolean);
- begin
-
-
- end;
-
- procedure TForm2.FormCreate(Sender: TObject);
- begin
- Application.OnMessage := OnMsg;
- end;
-
- end.
第三种:自己处理窗口函数,个人感觉这是最强大的,可以拦截一切发往窗口的消息!
- unit Unit2;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs;
-
- type
- TForm2 = class(TForm)
- procedure FormCreate(Sender: TObject);
- private
-
-
- public
-
- procedure WndProc(var nMsg: TMessage); override;
- end;
-
- var
- Form2: TForm2;
-
- implementation
-
- {$R *.dfm}
-
- procedure TForm2.WndProc(var nMsg: TMessage);
- begin
-
-
-
- inherited;
-
- if nMsg.Msg = WM_QUERYENDSESSION then
- begin
- if nMsg.LParam = 0 then
- ShowMessage(‘关机或重启‘)
- else
- ShowMessage(‘注销‘);
- end;
-
- end;
-
- end.
delphi处理消息的几种方式
原文:http://www.cnblogs.com/chnxnghi/p/4164961.html