1.TApplication.OnMessage
2.procedure WndProc
3.procedure ...;message MY_MESSAGE
4.procedure DefaultHandler详细点啊,让我明白这个问题啊!!

解决方案 »

  1.   

    1:
    mainwndproc是定义在Twincontrol类中的一个静态方法,不能被重载(Override)。它不直接处理消息,而是交由wndproc方法处理,并为wndproc方法提供一个异常处理模块。
    2:
    Wndproc是在Tcontrol类中定义的一个虚拟方法,由它调用dispatch方法来进行消息的分配,
    3:
    而Dispatch方法会根据消息号码调用构件的最后代类中处理此消息的句柄方法.如果此构件和它的祖先类中都没有对应此消息的处理句柄,Dispatch方法便会调用Defaulthandler方法.Defaulthandler方法是定义于Tobject中的虚拟方法,
    4:
    重 载 虚 拟 方 法wndproc 的 一 般 过 程 如 下:procedure Tmyobject.wndproc(var message:Tmessage);
    begin
    {...判断此消息是否该处理..}
    inheritedwndproc(message);
    {未处理的消息交由父辈wndproc方法处理}
    end;由此可以看出在wndproc方法中处理消息的优势是可以过滤整个范围内的消息,而不必为每个消息指定一个处理句柄,事实上Tcontrol构件中就是利用它来过滤并处理所有的鼠标消息的(从WM_mousefirst到WM_mouselast,如下代码示).同样利用它也可以阻止某些消息被发送给处理句柄。procedure TControl.WndProc(var Message: TMessage);
    begin
      if (Message.Msg>=WM_MOUSEFIRST) and (Message.Msg <= WM_MOUSELAST) then
        if Dragging then{处理拖曳事件}
          DragMouseMsg(TWMMouse(Message))
        else
          ...{处理其他鼠标消息}
      end;
      Dispatch(Message);
      {否则正常发送消息}
    end;
      

  2.   

    Application.Onmessage事件为应用程序的所有窗口查看消息队列;
    它处理消息的顺序是根据消息发生的顺序和消息的优先级;