多くのドキュメントフォーム/フレームと1つのマスターフォームの従来の意味でFireMonkeyを使用してMDIアプリケーションを作成することは可能ですか?
フォームにMDIコントロールがなくなったので、特に興味があります。別のものに置き換えられましたか?
編集:質問に加えて、子フォームを作成すると、OpenDialogsも含めて、すべてタスクバーに個別に表示されました。
多くのドキュメントフォーム/フレームと1つのマスターフォームの従来の意味でFireMonkeyを使用してMDIアプリケーションを作成することは可能ですか?
フォームにMDIコントロールがなくなったので、特に興味があります。別のものに置き換えられましたか?
編集:質問に加えて、子フォームを作成すると、OpenDialogsも含めて、すべてタスクバーに個別に表示されました。
使用できるアプローチの1つは次のとおりです。
1)TLayoutを使用することを除いて、通常どおりに個々のフォームを作成し、そのフォーム上のすべてのコントロールの親として「LayoutMain」(整列されたalClient)と呼びます。
2)「マスターフォーム」で、フォームインスタンスをMDIインターフェイスのように動作させる場合は、TLayout(「FormContainer」などと呼びます)を作成し、その子として配置します(上)別のTLayout(「FormHeader」と呼びます)。フォームキャプション、最小化/最大化/閉じるボタン、および「フレーム」見出しに必要なその他のすべてのコントロールが含まれています。これは コンポジットと呼ばれます。
3)子フォームのインスタンスを作成し(ただし、表示しないでください)、そのインスタンスのプライマリTLayout"LayoutMain"をメインフォームのTLayout"FormContainer"にペアレント化します。
4)前述のTLayout(「FormHeader」という名前)で、それとOnMouseDownイベントOnMouseMoveを指定して、マスターフォーム内でドラッグできるようにします。
マスターフォーム内の子フォームを最大化する場合は、外側のTLayout "FormContainer" alignプロパティをalClientに設定するだけで、元のTop、Left、Width、Heightの値をフォームのインスタンス内に保存することを忘れないでください。復元ボタンを押したときにそれらを思い出してください。
確かに、これはかなり複雑なソリューションですが、私の知る限り、これは、現在存在するFireMonkey( Update 2頃)でやろうとしていることを達成する唯一の方法です。
MDIは昔ながらのアプローチと見なされているため、EmbarcaderoがFireMonkeyの一部として「箱から出して」MDIエミュレーションを提供することは期待していません。
より最新のソリューションは、RAD Studio IDE自体と同様に、ドッキングを使用することです。これにより、両方の長所が提供され、ユーザーは、マスターフォームにリンクする子フォームを選択したり、独自に(またはドッキングされた配置の任意の組み合わせで)その外に表示したりすることができます。