皆さんこんにちは!
現在のプロジェクトの 1 つでかなり厄介な問題が発生しています。現在のプロジェクトの 1 つで、ハードウェア ライブラリ (Andreas Hausladen による NVAPI Pascal ヘッダー変換) を使用しています。このライブラリを使用すると、NVIDIA GPU から情報を取得できます。私は温度を取得するためにそれを使用しています. Firemonkey の助けを借りTAnimateFloat
て、カスタムメイドのダイヤルの角度を調整して温度を示しています.
FMX はデフォルトで Windows の Direct 2D に設定されているため、さまざまな「ゲーマー」ツール (MSI Afterburner、FRAPS など) を使用して FPS を監視できます。
私が抱えている問題は、システムをスリープ モード (RAM/S3 にサスペンド) にしてから再起動すると、アプリケーションのインターフェイスが (部分的または完全に) 暗くなり、UI に何も表示されないことです。目に見えてさわやかです。NVAPI ライブラリの初期化を定期的に呼び出し、タイマーで結果を確認していますが、問題は解決しません。私も実行ProcessMessages
しており、親ダイヤルとそれは子コントロールです(フォームまたは同等のものrepaint
を見つけることができないため)。repaint
ライブラリのさまざまなバージョンを試しましたが、それぞれが同じ問題を示しています。次の段落は、これが実際には問題ではなく、実際にはレンダラーに問題があることを示しています。
私には1つの解決策がありますが、もっとエレガントで利用可能なものがあるかどうか知りたいです。私が持っている解決策には、プロジェクトのソースFMX.Types.GlobalUseDirect2D := False;
に前に追加することが含まれます。Application.Initialize
ただし、これにより、FMX は Direct2D ではなく GDI+ を使用するようになります。もちろん動作しますが、可能であればオプションとして D2D をオープンにしたいと考えています。パラメータに応じてオン/オフを切り替えることができますFindCmdLineSwitch
が、D2D から GDI+ に、またはその逆に変更するには、アプリケーションを再起動する必要があります。
奇妙なことに、FPS カウンター (私の場合は FRAPS から) は、UI でまだアクティビティが発生していることを示しています (値が予想どおりに変化するため) が、UI 自体は目に見えて更新されていません。
これは Direct2D に関連する問題ですか、それとも Firemonkey の実装のバグですか? さらに重要なことに、D2D を無効にするよりも良い修正方法はありますか? 最後に、関連して、最初にアプリケーションを終了せずにアプリケーションを「再初期化」することは可能ですか?