var
  HookHandle: HHOOK;function TestHookProc(Code: Integer; WParam: Longint;Msg:Longint): Longint;stdcall;
begin
    if PMsg(Msg)^.Message = WM_LBUTTONDOWN then
    begin
      //进行自己的事件处理
      //如何让程序继续对WM_LBUTTONDOWN 的处理?
    end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
  HookHandle:=SetWindowsHookEx(WH_GETMESSAGE,TestHookProc,0,GetCurrentThreadID);
end;WM_LBUTTONDOWN被拦截了, 如何让程序继续对WM_LBUTTONDOWN 的处理?

解决方案 »

  1.   

    [Error] Unit1.pas(31): This form of method call only allowed in methods of derived types
      

  2.   

    inherited是属于OOP范畴内使用的。是继承的意思。你定义的是Hook。
    Hook截获的内容,你可以加以处理。
    如果没有改动截获的内容的话,他会继续传递给目标对象。
      

  3.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;
    type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}
    var
      HookHandle: HHOOK;function TestHookProc(Code: Integer; WParam: Longint;Msg:Longint): Longint;stdcall;
    begin
        if PMsg(Msg)^.Message = WM_LBUTTONDOWN then
        begin
          showMessage('已经截获该消息MOUSEDOWN');
          //inherited;//  出错
        end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      HookHandle:=SetWindowsHookEx(WH_GETMESSAGE,TestHookProc,0,GetCurrentThreadID);
    end;end.
      

  4.   

    里面不用写了吧
    然后你其他对象里如果有lbbuttondown的事件,它会自己跳到那里去执行
      

  5.   

    不行,
    WM_LBUTTONDOWN被拦截了, 程序不再继续对WM_LBUTTONDOWN 进行处理
      

  6.   

    例如,再加一个button,click时,不执行button中的程序
      

  7.   

    如程序中所示:
        showMessage('已经截获该消息MOUSEDOWN');