Windows の Aero テーマ グラス機能に対する Delphi 2009/2010 のサポート、正確には DoubleBuffered の意味、および Aero グラスとの関係について混乱しています。DoubleBuffered は VCL のプロパティであるだけでなく、 .net WinFormsにもあることがわかりました。最初は、コモン コントロール ライブラリで使用されるある種のウィンドウ スタイル ビットが設定されているのではないかと考えていました。なぜ使用するのか、いつ使用する必要があるのか?
[更新: ちらつきを軽減するための一般的な手法として、「ダブル バッファリング」とは何かを知っていることを述べる必要があります。 Windows 7. 以下にリンクされているブログ投稿が最も有益なようです。]
特に、DoubleBuffered プロパティに混乱しています。なぜそれが存在するのか、フォームとコントロールのガラス サポートとダブル バッファリングされたプロパティの間の関係がどのように設定されているのかを知りたいです。このような C++ の記事を読むと、ダブル バッファリングについて言及されていないことがわかります。
【追記2:以下、一部事実誤認があり訂正しました】
従来の Win32 アプリで DWM/Aero 合成をオンにしたときに、DWM/Aero 合成が引き起こす「黒がガラスになる」グリッチを回避するために、SetLayeredWindowAttributes を呼び出す方法について話している C++ 開発者を見つけました [ただし、以下のブログ リンクは、これが機能しなくなったことを示しています。 Windows 7 で、Microsoft がブロックするまで、実際には Vista で短時間しか機能しませんでした]。[間違った考えを始める]明るいマゼンタのような他の色を使用して、それをガラスの透明色に変えるべきではありませんか? [間違った考えを終わらせる]
DoubleBuffered を設定する必要がある場合と設定しない場合のルールは何ですか? そもそも DoubleBuffered が VCL に追加されたのはなぜですか? 設定するといつ問題が発生しますか?(リモート デスクトップが 1 つのケースのようですが、それが唯一のケースですか?) そして、それが設定されていない場合、ボタン テキストのレンダリングに問題が発生します。これは、Delphi がデフォルトの「ガラスとして黒をレンダリングする」を変更していないように見えるためです。 " Aero DWM で。
Aero グラスのレンダリングは基本的に奇妙で理解しにくい方法で行われているようです [この機能をラップするだけの Delphi ではなく、Windows 自体によって]、2009/2010 の内部 VCL ソース コードの多くStdCtrls のクラスは、Aero Glass で正しくレンダリングするために多くの複雑なロジックを実行する必要がありますが、まだ多くの問題があり、間違っているように見えます。 [更新 3: ガラスの多くのレンダリング グリッチ、VCL では、一般的なコントロール内で間違ってレンダリングされているようですが、Microsoft は修正を気にしていないようです。要するに、Delphi VCL コードの修正では、古い Windows 共通コントロール ライブラリと最新の [しかし風変わりな] Aero Glass 合成機能が互いにあまり好きではなく、特にうまく連携しないという事実を修正することはできません。このような高品質のテクノロジを構築し、それを世界に広めてくれた Microsoft に感謝します。]
そして、まだ十分に楽しくない場合。ParentDoubleBuffered があるのはなぜですか?
[7 月 30 日の更新: この質問は私にとって興味深いものです。なぜなら、大規模な既存の VCL フレームワークがある場合、この問題を解決するために Windows API に取り組むことは困難な問題であることを示していると思うからです。]