私は最近、大規模なプログラムを Delphi から Lazarus に移行しました。ほとんどのバグは整理されており、Lazarus / FPC に完全に感銘を受けています。しかし、私がよく理解できないバグが1つあります。
私のアプリケーションには、メインの OpenGL ウィンドウといくつかの補助フォームがあります。当初、これらのフォームは Delphi VCL を使用して設計していましたが、現在は Lazarus LCL に移行しています。
編集: OpenGL ウィンドウは、現時点では LCL フォームではありません。Win32 への呼び出しを使用して実装され、独自のメッセージ ループがあります。
次のコード行に従って、すべてのフォームはメインの OpenGL ウィンドウの子と見なされます。
Form.ParentWindow := OpenGLWindow.h_wnd;
残念ながら、フォームが OpenGL ウィンドウによって所有されている場合、フォームは単に消えてしまいます。もちろん、OpenGL ウィンドウは 30fps のフレームレートで更新され、これがスクリーン バッファの問題を引き起こしています。フォームがレンダリングされ、OpenGL ウィンドウによってその上にレンダリングされます。
フォームがメイン ウィンドウによって所有されていない場合、問題は解決されます。残念ながら、所有権の変更はエンド ユーザーにとってかなり混乱を招きます (メニューがプログラムの背後で失われるなど)。
このような問題をどこから始めればよいのでしょうか。フォーム内にレンダリングするための独自のスクリーン バッファがあることを確認する必要がありますか、それとも間違った考えですか?
いくつかのことを明確にするために: QT などではなく、LCL の Win32 バージョンを使用しています。また、フォームをダブルバッファリングするように設定して、それが役立つかどうかを確認しようとしましたが、そうではありませんでした.