【问题标题】:TWebBrowser - Trying to fix the "Invalid floating point operation" errorTWebBrowser - 尝试修复“无效的浮点运算”错误
【发布时间】: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


【解决方案1】:

我认为不值得尝试。 IE 中的滚动将在其滚动条可见或不可见的情况下发生......使用您的 TScrollbar 显然会滚动浏览器,这反过来又会产生相同的确切错误。我不知道 IE 的内部结构,不知道这个浮点错误到底在哪里...

你到底是滚动条,还是只是外面的滚动条?滚动的内部内容(例如嵌入式框架)呢?文档上的其他内部滚动条是否会产生相同的错误?如果他们这样做了,那么您将在很长一段时间内追逐自己的尾巴,试图在所有可滚动内容上超越 IE。

已提供该修复程序并经过测试。抱歉,我会使用建议的修复方法。

【讨论】:

  • 好吧..如果滚动条不可见,则不会发生错误。该错误仅在我单击滚动条时发生,因此我假设这是可能的并且值得尝试。
  • 您是否也要移除组合框、编辑框、嵌入框架上的滚动条?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-11
  • 1970-01-01
  • 1970-01-01
  • 2016-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多