2011-11-17 12 views
5

FireMonkeyを使用して、多くのドキュメントフォーム/フレームと1つのマスタフォームという伝統的な意味でMDIアプリケーションを作成できますか?私はフォームにはMDIコントロールはもはや存在しないので、特に興味FireMonkeyとのMDIインターフェイス

は...それは別の何かに置き換えられていますか?

EDIT:

1)として、あなたの個々のフォームを作成します。私は子フォームを作成するときに問題に加えて、それらはすべて

+0

XE2アップデートがまだリリースされているので、最終的に修正されると思います。 – Kromster

答えて

5

はここでは使用することができる一つの方法だ...でもOpenDialogs、別途タスクバーに示しました。 TLayoutを使用することを除いて、通常、そのフォームのすべてのコントロールの親として "LayoutMain"(整列されたalClient)を呼び出します。

2) "マスターフォーム"で、フォームインスタンスをMDIインターフェイスとして動作させる場合は、TLayout( "FormContainer"などと呼んでください)を作成し、 Form Caption、Minimize/Maximize/Closeボタンなどの個別のコントロールを含む別のTLayout(「FormHeader」と呼ぶ)を「フレーム」見出しに追加します。 これはコンポジットと呼ばれています。

3))(あなたの子フォームのインスタンスを作成しますが、それをを表示しない、親、そのインスタンスの主TLayout「LayoutMain」メインフォームのTLayout「FormContainer」へ。

4)前述のTLayout(「FormHeader」という名前)で、OnMouseDownOnMouseMoveというイベントを与え、マスターフォームの周りにドラッグする機能を提供します。

マスターフォーム内で子フォームを最大化する場合は、外側のTLayout "FormContainer" alignプロパティをalClientに設定して、元のTop、Left、WidthおよびHeightの値をフォームのインスタンスに保存されているので、[復元]ボタンを押すと呼び出すことができます。

本当に、これはかなり複雑な解決策ですが、私の知る限りでは、今日のようにFireMonkeyでやろうとしていることを達成するための唯一の方法です()。

MDIは、昔ながらのアプローチと考えられているように私は、エンバカデロが「箱から出して、」FireMonkeyのの一環として、MDIエミュレーションのいずれかの形式を提供するために、期待していません。

より現代的な解決策は、RAD StudioのIDE自体がするように、ドッキングを使用することです。これは、両方の世界の中で最高のものを提供し、ユーザーがどの子フォームをマスターフォームにリンクするかを自由に選択することができます。

+0

良い答えをいただき、ありがとうございます。私の場合、私は独自のTFMXHandles(私はプラットフォーム上のHWNDに変換してOpenGLコンテキストを初期化する)を持ついくつかのMDIウィンドウを持つことができるより標準的なソリューションを探していました。私の既存のソリューションはいくつかのフォームを作成することですが、残念ながら彼らは一緒にうまく動作していません - タスクバーからのZオーダーとフォーカスは間違っています。 – Kromster

関連する問題