【发布时间】:2022-01-02 10:56:00
【问题描述】:
我在 Delphi 10.4.1 中使用TEdgeBrowser。效果很好。
唯一令人烦恼的问题是,当TEdgeBrowser 获得焦点时,它会抓取 F12 和 CTRL+SHIFT+C 并显示 OpenDevToolsWindow。这很好,除了我想在加载之前更改表单的一些最顶层属性(否则,DevTools 窗口将位于 MainForm 后面)。
有没有办法从父 MainForm 捕获 F12 ?我尝试过 Application 和 MainForm 键捕获,但都无法捕获 TEdgeBrowser 键事件(当 TEdgeBrowser 具有焦点时)。
procedure TMainForm.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
case Msg.Message of
WM_KEYDOWN, WM_KEYUP:
begin
if Msg.WParam = VK_F11 then
begin
SetStatusLog(EID_KEYPRESS,'F11');
Handled := true;
end
else if Msg.WParam = VK_F12 then
begin
{ do something here and consider F12 handled, preventing F12 from going to TEdgeBrowser???}
SetStatusLog(EID_KEYPRESS,'F12');
Handled := true;
end;
end;
end;
end;
还有其他方法可以解决这个问题吗?
另外,我可以通过编程方式启动 OpenDevToolsWindow 吗?
【问题讨论】:
-
使用
ExecuteScript(JS),您可以在浏览器中插入 JavaScript 并执行它。这样你就可以放置一个EventListener。示例 没有括号 (stackoverflow.com/questions/34241258/…) 描述了一个用于 KeyDown 的示例。您必须使用window.chrome.webview.postMessage(Key) 从 JavaScript 将键值返回给 Delphi(这就是理论)。为此,您必须在 Delphi 中连接 WebMessageReceived 事件。 -
@USauter 您提供的链接似乎已损坏。不过感谢您的想法。
-
我可以轻松地在 ExecuteScript 中连接帖子消息。我对此进行了测试,它与 WebMessageReceived 事件配合得很好。不幸的是,我似乎无法使用推荐的解决方案,因为它需要更改页面代码。我想将 EdgeBrowser 指向任何站点,并且仍然可以控制按键。看来我需要更改页面元素。也许我误解了解决方案。
-
了解 Webview 中的 AcceleratorKeyPressed 事件。有没有人试图捕捉这个事件?
标签: delphi devtools tedgebrowser