如何在delphi中向messagehandler添加两条消息?

时间:2009-07-16 22:00:35

标签: delphi

在我的表格声明中,我做了一个消息处理程序:

procedure MessageHandler(var Msg:TMessage);Message MSG_ACCESS;

const
MSG_ASYNC = $BAD;
MSG_ACCESS = $BEEF;

当我检查邮件时,在消息处理程序中,它工作正常,但如果我更改这样的声明:

procedure MessageHandler(var Msg:TMessage);Message MSG_ACCESS or MSG_ASYNC;

我发送的所有邮件都没有被处理。

如何使用两条消息制作它?

2 个答案:

答案 0 :(得分:10)

只需创建两个消息处理程序即可调用共享消息处理程序。

Procedure MessageHandler(var Msg:tMessage);
begin
  // your code here
end;

Procedure MsgAccessHandler(var Msg:Tmessage); message MSG_ACCESS;
begin
  MessageHandler(Msg);
end;

Procedure MsgAsyncHandler(Var Msg:tMessage); message MSG_ASYNC;
begin
  MessageHandler(Msg);
end;

答案 1 :(得分:2)

Pascal中的OR运算符充当逻辑和二进制OR(||和|),具体取决于上下文。所以MSG_ACCESS或MSG_ASYNC是$ 0BAD OR $ BEEF = $ BFEF(0x0BAD | 0xBEEF)。

所以你正在尝试处理Message $ BFEF

另一种方法是使用MessageHook例程

function MsgHook(var Message:TMessage):Boolean;

在表单中创建使用

Application.HookMainWindow(MsgHook);

确保你在析构函数中取消它

  Application.UnhookMainWindow(MsgHook);

function TFormMain.MsgHook(var Message: TMessage): Boolean;
begin
  case Message.Msg of
    MSG_ACCESS :
    begin
      // what ever
    end;
    MSG_ASYNC:
    begin
      // what ever
    end;
  end;
  Result := False;
end;

也可以覆盖表格的WndProc:

procedure WndProc(var Message: TMessage); override;