在我的表格声明中,我做了一个消息处理程序:
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;
我发送的所有邮件都没有被处理。
如何使用两条消息制作它?
答案 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;