就是使TWwebbrowser的快捷键如F5刷新网页,ctrl+N打开新网页失效!

解决方案 »

  1.   

    IDocHostUIHandler中有一个TranslateAccelerator方法// 屏蔽Ctrl+N
    function TCustomEmbeddedWB.DoFilterMsg(const lpMsg: PMSG): HRESULT;
    begin
       Result := S_FALSE;
       if (lpMsg^.message = WM_KEYDOWN)
          and (GetKeyState(VK_CONTROL) < 0) then
          begin
             if 'N' = Char(lpMsg.wParam) then
                begin
                   Result := S_OK;
                end;
          end;
    end;function TranslateAccelerator(const lpMsg: PMSG;
       const pguidCmdGroup: PGUID; const nCmdID: DWORD): HRESULT;
    begin
       Result := DoFilterMsg(lpMsg);
    end;
      

  2.   

    procedure TForm2.ApplicationEvents1Message(var Msg: tagMSG;
      var Handled: Boolean);
    var
      mPoint: TPoint;
      const
      _KeyPressMask = $80000000;
    begin
      //屏蔽右键菜单
    //  with Msg do
    //  begin
    //    if not IsChild(WebBrowser1.Handle, hWnd) then Exit;
    //    Handled := (message = WM_RBUTTONDOWN) or (message = WM_RBUTTONUP) or (message = WM_CONTEXTMENU);
    //  end;  //替换右键菜单
      if IsChild(WebBrowser1.Handle, Msg.Hwnd) and
         ((Msg.Message = WM_RBUTTONDOWN) or (Msg.Message = WM_RBUTTONUP)) then
      begin
          GetCursorPos(mPoint);  //得到光标位置
          PopupMenu1.Popup(mPoint.X, mPoint.Y);   //弹出popupmenu1的菜单
          Handled:=True;
      end;  //禁止Ctrl + N
      //禁止Ctrl + F
      //禁止Ctrl + A
      if Msg.message = WM_KEYDOWN then
      begin
        if ((Msg.lParam and _KeyPressMask) = 0) and
           (GetKeyState(VK_Control) <0) and ((Msg.wParam = Ord('N'))
              or (Msg.wParam = Ord('F')) or (Msg.wParam = Ord('A'))) then
        begin
          Handled := True;
        end;
      end;
    end;