我想定义有问题,一不能放在类中(类会给函数隐式的增加Self参数),二需要声明成stdcall;
function NewWndProc(Handle: HWND; Msg: Integer; wParam, lParam: Longint): Longint; stdcall;

解决方案 »

  1.   

    lpPrevWndProc:=SetWindowLong(self.Handle, GWL_WNDPROC, Integer(MakeObjectInstance(WindowProc)));
      

  2.   

    --~{!7~}chechy
      ~{5+JG~}CallWindowProc~{5D2NJ};9JG2;D\F%Ed#?#?#?~}
      

  3.   

    --》chechy
    但是 callWindowProc的参数还是不能匹配????
      

  4.   

    什么意思?我看不明白。
    我只说了一半,函数声明正确后,确实需要用prometheusphinx(白日梦)的方法:
    WndProcPtr:=MakeObjectInstance(NewWndProc);
    lpPrevWndProc:=SetWindowLong(self.Handle, GWL_WNDPROC, Integer(WndProcPtr));
    另外,在释放的时候务必调用以下代码:
      SetWindowLong(self.Handle, GWL_WNDPROC, Longint(lpPrevWndProc));
      { Free our user-created window procedure }
      FreeObjectInstance(WndProcPtr);
      

  5.   

    但是CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam);中的第二个参数在编译时不能通过,说指针和整形不匹配!!!!
      

  6.   

    这个简单,作强制类型转化就可以了:
    var
      a: Pointer;  a := Pointer(lpPrevWndProc);
      CallWindowProc(a, hw, uMsg, wParam, lParam);
      

  7.   

    那么 
        function NewWndproc的声明应该放在那里??