2

大家下午好!

我目前的一个项目遇到了一个相当烦人的问题。我正在我当前的一个项目中使用硬件库(Andreas Hausladen 的 NVAPI Pascal 标头翻译)。这个库允许我从 NVIDIA GPU 检索信息。我用它来检索温度,在 Firemonkey 的帮助下TAnimateFloat,我正在调整定制表盘上的角度以指示温度。

由于 FMX 在 Windows 上默认为 Direct 2D,因此我可以使用任何各种“游戏玩家”工具(MSI Afterburner、FRAPS 等)来监控 FPS。

我遇到的问题是,当我将系统置于睡眠模式(挂起到 RAM/S3),然后再次启动它时,我的应用程序上的界面被黑屏(部分或完全),并且 UI 上什么也没有明显令人耳目一新。我定期调用 NVAPI 库的初始化并通过计时器检查结果,但这并不能解决问题。我也在运行ProcessMessagesrepaint在父表盘上,它是子控件(因为我似乎无法找到repaint表单或等效项)。

我尝试了各种版本的库,每个版本都存在相同的问题。下一段表明这实际上不是问题,它实际上是渲染器的错误。

我有一个解决方案,但我想知道是否有更...​​优雅、可用的东西。我的解决方案涉及在我的项目源代码中添加FMX.Types.GlobalUseDirect2D := False;之前。Application.Initialize但是,这会强制 FMX 使用 GDI+ 而不是 Direct2D。它当然可以,但是如果可以的话,我想将 D2D 作为一个选项保持打开状态。我可以FindCmdLineSwitch根据参数打开/关闭此功能,但这仍然需要我重新启动应用程序才能从 D2D 更改为 GDI+,反之亦然。

奇怪的是,FPS 计数器(在我的例子中来自 FRAPS)表明 UI 中仍在发生活动(因为值会按预期发生变化),但 UI 本身并没有明显令人耳目一新。

这是与 Direct2D 相关的问题,还是 Firemonkey 实现的错误?更重要的是,有没有比禁用 D2D 更好的修复方法?最后,同样相关的是,是否可以在不先终止应用程序的情况下“重新初始化”应用程序(所以也许我可以允许用户在 GDI+ 和 D2D 之间切换而无需重新启动应用程序)?

4

1 回答 1

1

这可能是更新 4 修补程序之前的 FM 问题 - 26664/QC 104210 修复了用户解锁后 FireMonkey HD 表单无响应的问题 - 安装它可能会为您解决问题。

更新应该是您从 EDN 下载的注册用户的一部分(直接链接http://cc.embarcadero.com/item/28881)。

于 2012-05-25T15:58:23.020 回答