0

C++ Builder XE3 で、既存の OpenGL アプリケーションを VCL ベースのフォームから FMX ベースのフォームに変換しようとしています。

この目的のために、Firemonkey フォームのハンドルを使用して OpenGL デバイス コンテキストを作成し、このフォームを別のフォームの子にして、VCL ベースのアプリケーションにあったフォーム内のパネルを模倣します。

問題は、サイズ変更イベントの後、または一般に Invalidate() を呼び出した後、フォームが背景とともにレンダリングされることです。これによりちらつきが発生したり、さらに悪いことに、OpenGL でレンダリングされたシーンの代わりに背景が表示されることがあります。

Firemonkey-OpenGL-form の位置で領域の再描画を防ぐにはどうすればよいですか。または、Ownerdraw 関数などを定義できますか?

Firemonkey-3d-Form を使用するオプションはないことに注意してください。

4

2 に答える 2

0

何時間も実験した結果、解決策が見つかりました。「TCommonCustomForm」には必要なプロパティがあります。(1)それ自体は描画されません。(2)OpenGLの初期化に使用できるハンドルがあります。

この情報が他の人の役に立つことを願っています。

于 2013-02-12T08:34:31.403 に答える
0

フォームに透明な背景を与えてみましたか?次に、「上から」好きなものをペイントできます。

簡単な方法は、formsのTransparentプロパティをTrueに設定することですが、これによりComboBoxesで問題が発生します。

もう1つの方法は、フォームにTRectangleを配置することです。StyleNameを'backgroundstyle'に設定します。Fill.ColorをclaNullに設定します。Stroke.Thicknessを0に設定します。これにより、フォームのデフォルトの背景スタイルが置き換えられます。

独自の境界線もペイントしたい場合は、クライアント以外の領域のスタイルを調査する必要がありますが、現時点では、優れたリソースへのポインターがありません。

于 2013-02-10T17:07:04.283 に答える