【发布时间】:2012-08-08 16:31:16
【问题描述】:
TWebBrowser 组件有一个错误,如此处[IE9] 'Floating point division by zero' occurs with WebBrowser 所述。解决方案是调用一个过程,该过程将禁用所有除以零异常。我正在尝试解决此问题,而无需调用此过程。
到目前为止,我的最佳想法是禁用TWebBrowser 滚动条并尝试使用TScrollBar 模拟相同的功能。到目前为止,它正在工作,但这就是问题所在:
如何将TWebBrowser 中的导航与TScrollBar 同步?我需要截取TWebBrowser 的滚动消息并将它们发送到TScrollBar,以使栏与正在显示的文档保持同步。有谁知道该怎么做?
更清楚一点:我需要一种方法来告诉TScrollBar 它相对于TWebBrowser 中光标位置的位置。
我使用的是 Delphi 2010。
【问题讨论】:
-
您应该通过屏蔽 FP 异常来解决这个问题。我无法想象你为什么要让自己的生活如此痛苦。
-
链接的 QC 条目 cmets 已经告诉您解决方案:
Set8087CW($133F);在调用之前,然后在之后恢复它,如果您真的希望在 Web 浏览器消失后再次返回浮点异常。别无选择。 -
如果你的应用程序有超过 1 个 Delphi 线程,那么调用 Set8087CW 不是一个选项,因为它的线程不安全,而且它会更改 Default8087CW,这也可能泄漏到其他线程中。
-
这不是您问题的答案,而是一种潜在的解决方法。 IE 8 及更高版本在注册表中具有适用于 IE 浏览器和 webbrowser 控件的浏览器仿真功能 (msdn.microsoft.com/en-us/library/…)。使用此设置,您可以运行 IE,使其行为类似于 IE10、IE9、IE8 或 IE7。尝试不同的设置,并测试您的问题是否消失。注意:如果您的 IE 是 64 位,则密钥为 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
-
@DavidHeffernan:我目前在 C++ Builder 5 中工作......他们仍然没有修复新版本中的线程安全问题?!? (根据查看在线文档,我在旧版本中看到的在新版本中似乎未纠正的设计缺陷数量令人震惊)
标签: delphi ole messages twebbrowser