如题,主窗体中消息处理过程是procedure Message9999(var Msg:TMsg); message WM_PASSWORD; 
我在子窗体中调用SendMessage(TForm(Owner).Handle,WM_PASSWORD,1,0); 主窗体中可以收到这个消息,可是在Message9999过程的Msg结构中的wparam值不等于1,反而是Msg.message域等于我传递的wparam,请问各位这是什么原因?谢谢

解决方案 »

  1.   

    Type
      TMsg=Packed Record
       HWnd:HWND;//窗口句柄
       Message:UNIT;//消息常量标示符
       WParam:WPARAM;//32位消息的特定附加信息
       LParam:LPARAM;//32位消息的特定附加信息
       time:DWORD;//消息创建时间
       pt:TPoint;//消息创建时的鼠标坐标位置
      end;
    我在Watch中看到(1124,1,0,0……)也就是HWnd对应我的Message,Message对应我的wParam
      

  2.   


    不能这样定义的, 这个结构体必须符合API的约定, 不可以加入自定义的内容的, 直接使用Messages单元中的TMessage结构体吧。
      TMessage = packed record
        Msg: Cardinal;
        case Integer of
          0: (
            WParam: Longint;
            LParam: Longint;
            Result: Longint);
          1: (
            WParamLo: Word;
            WParamHi: Word;
            LParamLo: Word;
            LParamHi: Word;
            ResultLo: Word;
            ResultHi: Word);
      end;
      

  3.   

    procedure Message9999(var Msg:TMessage); message WM_PASSWORD;