请问怎样拦截消息使得右击不出现活动菜单?

解决方案 »

  1.   

    有个很简便的办法,
    拖一个PopupMenu1到窗体,空得,什么都不要添加,
    然后把memo1得PopupMenu属性设成这个PopupMenu1就可以了。
    你还可以自定义这个PopupMenu1
      

  2.   

    procedure TForm1.Memo1ContextPopup(Sender: TObject; MousePos: TPoint;
      var Handled: Boolean);
    begin
      Handled := true;
    end;
      

  3.   

    为什么要拦消息呢?
    拖一个PopupMenu1到窗体,空得,什么都不要添加,
    然后把memo1得PopupMenu属性设成这个PopupMenu1就可以了。
      

  4.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;type
      TForm1 = class(TForm)
        Memo1: TMemo;
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      g_proc:pointer;
      g_procInt:Integer;implementation{$R *.dfm}Function HookWindowProc(hwnd:HWND;uMsg:Integer;wParam:WPARAM;lParam:LPARAM):LRESULT;stdcall;
    var
     i: Integer;
    begin
      case uMsg of
        WM_RBUTTONDOWN : //Form1.Memo1.Lines.Add('aa'); //可以加入自己的代码,也可以什么都不添加
      else
        Result:=CallWindowProc(g_proc,hwnd,uMsg,Wparam,Lparam);
      end;
    end;procedure Hook(s_handle:HWND);
    begin
     g_procInt:=SetWindowLong(s_handle,GWL_WNDPROC,Integer(@HookWindowProc));
     g_Proc:=Pointer(g_procInt);
    end;procedure UnHook(s_handle:HWND);
    begin
      if g_procInt<>0 then
         begin
           SetWindowLong(s_handle,GWL_WNDPROC,g_procInt);
           g_procInt:=0;
         end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      Hook(memo1.Handle);
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
      UNHook(memo1.Handle);
    end;end.
      

  5.   

    private
        { Private declarations }
        procedure WMContextMenu(var msg: TWMContextMenu);message wm_contextmenu;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}{ TForm1 }procedure TForm1.WMContextMenu(var msg: TWMContextMenu);
    begin
      //showmessage('catch contextmenu message');
      msg.Result := -1;
    end;
      

  6.   

    谢谢各位的鼎立支持:
    bluezwt(蓝色天涯):我如果在Form1.Create的事件过程中用不止一个的HOOK的话(比如:Hook(Edit1.Handle)),来监视其它的控件,好象不行啊,这是什么原因啊?谢谢!