首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当显示模态窗口时,不触发用于delphi-TChromiumOSR.OnPaint的Chromium

当显示模态窗口时,不触发用于delphi-TChromiumOSR.OnPaint的Chromium
EN

Stack Overflow用户
提问于 2018-02-27 09:20:39
回答 2查看 476关注 0票数 0

我在dcef3包中使用屏幕外呈现组件dcef3--用于Chromium-embedded库的Delphi包装器。

情况

FormA包含一个TChromiumOSR并绘制输出。模态FormB通过对FormA.TChromiumOSR执行一些js代码来修改网页。

问题

TChromiumOSR.OnPaint事件(在FormA中)在FormB.ShowModal返回之前不会触发。

备注

  • 在上述情况下(以模态形式)和标准的控件不存在这样的问题。

我假设`TForm.ShowModal的方法只会阻塞背景表单的输入,而不是画图?

还是由cef3的内部工作引起的?

不管怎样,怎么解决呢?谢谢。

dcef3主分支在这里

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-03 16:29:10

好的,我找到了问题的根源--它不是在cef3或dcef3中的一个bug,而是由我不正确地使用Delphi事件总线引起的,下面是重现这个问题的步骤:

  1. 在其中一个'delphi‘处理程序中,程序显示了一个模式表单,此时主线程的执行被阻塞。
  2. 在模式表单的顶部,执行某些操作的用户将启动一个后台线程,该线程将向主线程发送一条消息,然后该线程将调用'delphi事件总线‘来发布另一个新事件,然后该事件将执行一些js代码来更新dcef3中的网页,这反过来将触发一些dcef3事件(在主线程中),这里是程序卡住的地方--因为TEventBus.Post()方法被TCriticalSection锁定。

解决方案:在步骤1中,不要直接调用ShowModal,而是使用诸如PostMessage winapi这样的技术来“延迟”ShowModal的执行。

我不确定我是否把它描述得很清楚..。

票数 0
EN

Stack Overflow用户

发布于 2018-02-27 21:15:52

通过使用从模式表单调用的ExecuteJavaScript方法,我成功地更新了一个HTML元素。但是您可能也使用了CEF V8 (这是我还没有测试过的)。对于需要手动使当前视图无效的情况,可以调用无效

代码语言:javascript
复制
MyChromiumOSR.Browser.Host.Invalidate(PET_VIEW);

但这是解决办法,而不是解决办法。相关元素的无效应该由CEF引擎为您发生。如果你想出一个MCVE,我可以对你的具体问题做更多的调查。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49005093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档