各位高手注意:已知另外一个窗体的button的handle,如何截取它的单击消息,连到我的窗体中的一个过程??好像用到消息子类化,,,帮助要求有源码,而且编译通过才能给分,因为我有源码,但通不过:)

解决方案 »

  1.   

    如果是在设计时实现,一个窗体USE另一个窗体就可以连接另一个窗体的过程
      

  2.   

    另外一个窗体的buttonClick中写
    SendMessage(我的窗体.Handle,WM_xxx,0,0);
    在我的窗体中处理WM_xxx消息就可以了
      

  3.   

    是Exe文件还是PAS文件如果是Exe文件就是用Hook如果是PAS文件就按上面各位所说,研究一下... ...
      

  4.   

    我不想用hook那样的话还得写dll,我看过这方面的资料,,,用子类化,,就轻松搞 定,,而且不用dll,,一个exe文件足矣
      

  5.   

    窗体子类化自定义函数
    function SubClassWndProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM):LResult;stdcall;i:=GetWindowLong(Button1.Handle,GWL_WNDPROC);
    SetWindowLong(Button1.Handle,GWL_WNDPROC,Longint(@SubClassWndProc));恢复
    SetWindowLong(Button1.Handle,GWL_WNDPROC,i);在函数中处理消息!
      

  6.   

    PostMessage(另一程序的句柄, 自定义的消息,自定义的参数1,自定义的参数2)
    在另一程序中一接收消息(上述消息)的过程
    procedure ReveiveMessage(var Msg: TMessage); Message 自定义的消息;
    在此执行需要的过程
      

  7.   

    bluebilly(蓝色天使) 的方法在这里无效!
      

  8.   

    应ghyghost的要求,贴出一段完整的例子!type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure Button2Click(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
      end;var
      Form1: TForm1;
      i:integer;
      function SubClassWndProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM):LResult;stdcall;function SubClassWndProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM):LResult;stdcall;
    begin
    if Msg = WM_LBUTTONUP then
    begin
      Showmessage('');
      Result := 0;
    end
    else
    begin
      Result := CallWindowProc(Pointer(i),Form1.Button1.handle,Msg,WParam,LParam);
    end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
    i:=GetWindowLong(Button1.Handle,GWL_WNDPROC);
    SetWindowLong(Button1.Handle,GWL_WNDPROC,Longint(@SubClassWndProc));
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
    SetWindowLong(Handle,GWL_WNDPROC,LongInt(Pointer(i)));
    end;