我正在 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吗?
4条答案
按热度按时间1sbrub3j1#
我用了两种方法来处理这件事。(1)您可以调用Set_AreBrowserAcceleratorKeysEnabled(0)禁用浏览器的快捷键(但这可能包括禁用比你想要的更多的东西,而这并不是你真正要求的。)而且它需要一些额外的工作才能访问这个接口,因为它不包括在当前的TEdgeBrowser中。另外,我在什么地方读到AcceleratorKey事件仍然会触发,即使您在EdgeBrowser中禁用了它们,如果您使用该方法,也可以处理它们。(2)使用AddScriptToExecuteOnDocumentCreated注入一些可以阻止默认行为的Javascript(如果需要),并向您的应用发送消息(您将在OnWebMessageReceived上获取该消息),以便您可以处理事件。
备选办法1:
您需要定义以下内容来访问所需的接口,因为它们是在TEdgeBrowser之后引入的:
然后在OnCreateWebViewCompleted事件中,您可以执行以下操作
备选方案二:
在OnCreateWebViewCompleted事件中,可以执行以下操作
注意,在选项2中,请参阅TEdgeBrowser代码作为定义回调的示例。它是在TEdgeBrowser的实现部分定义的。我只是在我自己的窗体的单元实现部分复制了它。
c9x0cxw02#
可以在
OnCreateWebViewCompleted
事件中使用ASender.DevToolsEnabled := False;
xriantvc3#
@斯塔克曼
我似乎不能使用推荐的解决方案,因为它需要更改页面代码。我想将EdgeBrowser指向任何网站,并且仍然可以控制按键。
ConsoleSource
xqkwcwgp4#
这个“回调”在哪个单元???F1没有给予我更多的信息。语法怎么能是Callback〈HResult,PChar〉with〈〉???