Delphi 将按键从TWebBrowser重定向到父窗体的方法
第一个问题。如果需要,请帮助格式化 上下文 我有一个主要形式的TWebBrowser,它的行为就像打印机一样。 所以当用户在真正的打印机中执行一些命令时,我在其中加载了一些HTML文本。。。 我希望用户能够单击并从WebBrowser中选择文本 问题 当用户在WebBrowser中单击时,从操作注册的一些快捷方式不再起作用。例如,有一个具有快捷方式F7的操作。如果用户单击WebBrowser并按F7,则不会调用我的快捷方式。 我知道这是WebBrowser的设计 所以,我想:我想把每个键组合都发送回表单。 问题是:怎么做? 如果是另一个控件,我可以使用PerformWmu键下键,。。。在OnKeyDown事件中Delphi 将按键从TWebBrowser重定向到父窗体的方法,delphi,focus,webbrowser-control,sendkeys,twebbrowser,Delphi,Focus,Webbrowser Control,Sendkeys,Twebbrowser,第一个问题。如果需要,请帮助格式化 上下文 我有一个主要形式的TWebBrowser,它的行为就像打印机一样。 所以当用户在真正的打印机中执行一些命令时,我在其中加载了一些HTML文本。。。 我希望用户能够单击并从WebBrowser中选择文本 问题 当用户在WebBrowser中单击时,从操作注册的一些快捷方式不再起作用。例如,有一个具有快捷方式F7的操作。如果用户单击WebBrowser并按F7,则不会调用我的快捷方式。 我知道这是WebBrowser的设计 所以,我想:我想把每个键组合都发
其他选择或建议也将不胜感激。这两天我很累,所以我可能错过了一些东西。使用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进行全屏显示和全屏退出。