DCEF4虚拟键盘不显示了

问题描述 投票:0回答:1

我使用的是CEF4Delphi从 https:/github.comsalvadordfCEF4Delphi。我正在编辑PopupBrowser2的例子。有Chromium1组件。我添加了一个事件,当键盘被请求时,它应该会通知我。

procedure TForm1.Chromium1VirtualKeyboardRequested(Sender: TObject; const browser: ICefBrowser;
  input_mode: TCefTextInpuMode);
begin
   caption := 'kbd';
end;

遗憾的是,当例子加载google页面时,我点击搜索编辑框,事件没有被调用。我怎样才能使事件被调用呢?

delphi chromium delphi-xe2 virtual-keyboard cef4delphi
1个回答
1
投票

TChromium.OnVirtualKeyboardRequested是ICefRenderHandler的事件之一,该处理程序只用于离屏模式(OSR模式)的浏览器。

PopupBrowser2演示使用的是正常模式下的浏览器(也就是 "窗口模式"),这意味着ICefRenderHandler事件不会被触发。

对于PopupBrowser2,你必须使用一个不同的事件,叫做GlobalCEFApp.OnFocusedNodeChanged。

在GlobalCEFApp.OnFocusedNodeChanged里面检查node.name与应该显示虚拟键盘的HTML标签名,比如 "input "或 "textarea"。

该事件在渲染过程中执行,你必须向主浏览器进程发送一个进程消息来显示键盘。

DOMVisitor演示了如何发送该进程消息,如果你需要的话,还需要一些参数。https:/github.comsalvadordfCEF4Delphiblob132edb2e8895d998d3e3810982c95b9f845d78f8demosDelphi_VCLDOMVisitoruDOMVisitor.pas#L305

浏览器进程将在TChromium.OnProcessMessageReceived事件中收到该消息,你可以在这里看到。https:/github.comsalvadordfCEF4Delphiblob132edb2e8895d998d3e3810982c95b9f845d78f8demosDelphi_VCLDOMVisitoruDOMVisitor.pas#L432。

请注意,TCefProcessMessageRef是由 "New "函数创建的,其名称为。当你在应用程序中实现TChromium.OnProcessMessageReceived时,你必须在处理它之前,比较message.name是否具有相同的名称值。

© www.soinside.com 2019 - 2024. All rights reserved.