在 Delphi 中禁用 TWebBrowser 上的键盘

Disable keyboard on TWebBrowser in Delphi

我想为 TWebBrowser 禁用键盘并避免使用 Ctrl+C 复制其中的信息。但我在 TWebBrowser 属性中找不到任何禁用键盘的选项。

有办法吗?

编辑:我看到了这个解决方案,但它不起作用。 Disable All Keypresses

您可以在应用程序级别执行此操作,防止将某些消息转发到 TWebBrowser 组件。例如,通过使用 TApplicationEvents 组件及其 OnMessage 事件处理程序:

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
  if (
    //keyboard
    (Msg.message = WM_KEYDOWN)
    //right click, for avoid copy-paste from popupmenu
    (Msg.Message = WM_RBUTTONDOWN) or
    (Msg.Message = WM_RBUTTONDBLCLK) or
  ) then
  begin
    if IsChild(WebBrowser1.Handle, Msg.hwnd) then
    begin
      Handled := True;
    end;
  end;
end;

更简洁的解决方案可能是在组件级别抑制此类消息,但不幸的是,我从来没有找到一种方法来使其与 TWebBrowser 组件一起使用

@法布里齐奥

感谢您的代码。此代码无法为 TWebBrowser 禁用键盘。 对于这个问题,我找到了一个名为 EmbeddedWB 的组件。它有禁用上下文菜单的选项。

现在,使用您的代码(稍作更改)的复合选项可以完全禁用文本复制。

procedure TMainForm.ApplicationEventsMessage(var Msg: tagMSG;
 var Handled: Boolean);
begin
 if ((Msg.message=WM_RBUTTONDOWN) or (Msg.message=WM_RBUTTONUP) or 
    (Msg.message=WM_KEYDOWN) or (Msg.message=WM_KEYUP)) and 
    IsChild(WebBrowser.Handle,Msg.hwnd) then
    begin
     PopupMenu.Popup(Msg.pt.X,Msg.pt.Y);
     Handled:=true;
 end;

结束;