Delphi 将按键从TWebBrowser重定向到父窗体的方法

Delphi 将按键从TWebBrowser重定向到父窗体的方法,delphi,focus,webbrowser-control,sendkeys,twebbrowser,Delphi,Focus,Webbrowser Control,Sendkeys,Twebbrowser,第一个问题。如果需要,请帮助格式化 上下文 我有一个主要形式的TWebBrowser,它的行为就像打印机一样。 所以当用户在真正的打印机中执行一些命令时,我在其中加载了一些HTML文本。。。 我希望用户能够单击并从WebBrowser中选择文本 问题 当用户在WebBrowser中单击时,从操作注册的一些快捷方式不再起作用。例如,有一个具有快捷方式F7的操作。如果用户单击WebBrowser并按F7,则不会调用我的快捷方式。 我知道这是WebBrowser的设计 所以,我想:我想把每个键组合都发

第一个问题。如果需要,请帮助格式化

上下文 我有一个主要形式的TWebBrowser,它的行为就像打印机一样。 所以当用户在真正的打印机中执行一些命令时,我在其中加载了一些HTML文本。。。 我希望用户能够单击并从WebBrowser中选择文本

问题 当用户在WebBrowser中单击时,从操作注册的一些快捷方式不再起作用。例如,有一个具有快捷方式F7的操作。如果用户单击WebBrowser并按F7,则不会调用我的快捷方式。 我知道这是WebBrowser的设计

所以,我想:我想把每个键组合都发送回表单。 问题是:怎么做? 如果是另一个控件,我可以使用PerformWmu键下键,。。。在OnKeyDown事件中


其他选择或建议也将不胜感激。这两天我很累,所以我可能错过了一些东西。

使用IDocHostUIHandler实现派生TWebBrowser或使用著名的

使用TranslateAccelerator中调用的事件OnTranslateAccelerator实现接口

在您的brwoser实例上设置事件

按如下方式检测您的密钥:

function TBrowserPageIE.DoTranslateAccelerator(const lpMsg: PMSG; const pguidCmdGroup: PGUID; const nCmdID: DWORD): HRESULT;
begin
  result := S_FALSE;

  if lpMsg.message = WM_KEYDOWN then begin
    if lpMsg.wParam = VK_F7 then begin
      // do something here...
      result := S_OK;
    end;
  end;
end;
<script = ''javascript''>
  function keypresed() {
    var tecla=window.event.keyCode;

    document.title = "Command"+tecla;
    event.keyCode=0;
    event.returnValue=false;
  }
  document.onkeydown=keypresed;
</script>

我测试和使用的一个选项是在HTML/javascript上捕获key_代码,然后通过更改文档标题将其发送到表单。我会让它在这里,希望能帮助别人

您需要添加javascript以捕获HTML页面标题中的键,如下所示:

function TBrowserPageIE.DoTranslateAccelerator(const lpMsg: PMSG; const pguidCmdGroup: PGUID; const nCmdID: DWORD): HRESULT;
begin
  result := S_FALSE;

  if lpMsg.message = WM_KEYDOWN then begin
    if lpMsg.wParam = VK_F7 then begin
      // do something here...
      result := S_OK;
    end;
  end;
end;
<script = ''javascript''>
  function keypresed() {
    var tecla=window.event.keyCode;

    document.title = "Command"+tecla;
    event.keyCode=0;
    event.returnValue=false;
  }
  document.onkeydown=keypresed;
</script>

这可以用于执行任何其他自定义命令:

也许这会告诉你使用IHTMLDocument2::onkeydown事件+1@daemon_x的方法。@RRUZ-问题是不同的,所以在这里重新发布或稍微修改你的答案以获得更多的投票:我在那里给了你一个,因为我不相信这是可能的。它工作得很好,我将在第二天在我的一个应用程序中实现它。Thanks@daemon_x,如果您可以修改原始答案以适应此问题,请随时详细说明新答案@RRUZ@daemon_x,非常感谢。我会花时间来测试它。对不起,我以前没找到。我搜索并阅读了超过15个关于TWebBrowser的问题和答案,但没有找到。再次感谢,你好,马提亚。我会花时间来测试这种方式。谢谢出于某些原因,我避免使用嵌入式WB。我从来没有用过它,所以我去论坛看看它是怎么回事。我发现那里没有多少问题得到回答。因为它是开源的,所以我可以自己编写代码。但是我参与了其他开源组件的开发,现在没有太多的时间。所以我害怕承担一些我无法完成的责任。例如,有人说它与IE9不兼容……我可以接受多个答案吗?因为我正在使用@daemon_x@RRUZ建议。这是一个非常好的解决方案和“技巧”。在我的例子中,我需要VK_F11和VK_ESCAPE进行全屏显示和全屏退出。