【问题标题】:DCEF4 virtual keyboard is not showing upDCEF4 虚拟键盘未显示
【发布时间】:2020-05-05 07:09:24
【问题描述】:

我正在使用来自https://github.com/salvadordf/CEF4Delphi 的 CEF4Delphi 我正在编辑 PopupBrowser2 示例。有 Chromium1 组件。我添加了事件,应该在请求键盘时通知:

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

可悲的是,当示例加载谷歌页面时,我点击搜索编辑框并且没有调用事件。如何使事件被调用?

【问题讨论】:

    标签: delphi chromium delphi-xe2 virtual-keyboard cef4delphi


    【解决方案1】:

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

    PopupBrowser2 演示使用正常模式(也称为“窗口模式”)的浏览器,这意味着不会触发任何 ICefRenderHandler 事件。

    使用 PopupBrowser2,您将不得不使用名为 GlobalCEFApp.OnFocusedNodeChanged 的​​不同事件

    使用应在 GlobalCEFApp.OnFocusedNodeChanged 中显示虚拟键盘(如“input”或“textarea”)的 HTML 标记名称检查 node.name。

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

    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 是由具有名称的“新建”函数创建的。当您在应用程序中实现 TChromium.OnProcessMessageReceived 时,您必须在处理之前比较 message.name 是否具有相同的名称值。

    【讨论】:

    • 我已经分配了这样的事件GlobalCEFApp.OnFocusedNodeChanged := MainForm.OnFocusedNodeChanged;,但它没有被调用。 Assigned(GlobalCEFApp.OnFocusedNodeChanged) 返回真。
    • GlobalCEFApp.OnFocusedNodeChanged 在“渲染”进程中执行,Delphi 默认调试主浏览器进程。似乎没有调用它,因为Delphi没有调试渲染过程。如果您需要调试该代码,请使用单进程模式。在 DPR 文件中调用 GlobalCEFApp.StartMainProcess 之前将 GlobalCEFApp.SingleProcess 设置为 True。请记住,单进程模式仅用于调试目的。阅读本文以了解有关调试 CEF 应用程序的更多详细信息:briskbard.com/index.php?lang=en&pageid=cef#debugging
    猜你喜欢
    • 2014-07-03
    • 1970-01-01
    • 2020-10-09
    • 2017-07-16
    • 2015-01-02
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多