提问人:Edijs Kolesnikovičs 提问时间:5/5/2020 更新时间:5/8/2020 访问量:425
DCEF4 虚拟键盘未显示
DCEF4 virtual keyboard is not showing up
问:
我正在使用 CEF4Delphi https://github.com/salvadordf/CEF4Delphi 我正在编辑 PopupBrowser2 示例。有 Chromium1 组件。我添加了事件,该事件应该在请求键盘时通知:
procedure TForm1.Chromium1VirtualKeyboardRequested(Sender: TObject; const browser: ICefBrowser;
input_mode: TCefTextInpuMode);
begin
caption := 'kbd';
end;
可悲的是,当示例加载谷歌页面时,我单击搜索编辑框并且没有调用事件。如何使事件被调用?
答:
TChromium.OnVirtualKeyboardRequested 是 ICefRenderHandler 的事件之一,该处理程序仅供处于屏幕外模式(OSR 模式)的浏览器使用。
PopupBrowser2 演示使用正常模式(也称为“窗口模式”)的浏览器,这意味着不会触发任何 ICefRenderHandler 事件。
使用 PopupBrowser2,您必须使用名为 GlobalCEFApp.OnFocusedNodeChanged 的不同事件
检查带有 HTML 标记名称的 node.name,这些标记名称应显示虚拟键盘,例如 GlobalCEFApp.OnFocusedNodeChanged。
该事件在渲染过程中执行,您必须向主浏览器进程发送进程消息以显示键盘。
DOMVisitor 演示向您展示了如何在需要时发送带有一些参数的进程消息: https://github.com/salvadordf/CEF4Delphi/blob/132edb2e8895d998d3e3810982c95b9f845d78f8/demos/Delphi_VCL/DOMVisitor/uDOMVisitor.pas#L305
浏览器进程将在 TChromium.OnProcessMessageReceived 事件中接收该消息,如下所示:https://github.com/salvadordf/CEF4Delphi/blob/132edb2e8895d998d3e3810982c95b9f845d78f8/demos/Delphi_VCL/DOMVisitor/uDOMVisitor.pas#L432
请注意,TCefProcessMessageRef 由具有名称的“New”函数创建。在应用程序中实现 TChromium.OnProcessMessageReceived 时,在处理之前必须比较 message.name 具有相同的名称值。
评论
GlobalCEFApp.OnFocusedNodeChanged := MainForm.OnFocusedNodeChanged;
Assigned(GlobalCEFApp.OnFocusedNodeChanged)
评论