MDI интерфейс с FireMonkey - PullRequest
       27

MDI интерфейс с FireMonkey

5 голосов
/ 17 ноября 2011

Можно ли создать приложение MDI с использованием FireMonkey в традиционном смысле для многих форм / фреймов документов и одной главной формы?

Мне особенно интересно, поскольку в формах больше нет элементов управления MDI ..Было ли оно заменено чем-то другим?

РЕДАКТИРОВАТЬ: В дополнение к вопросу, когда я создаю дочерние формы, они все отображаются отдельно на панели задач, даже OpenDialogs ..

1 Ответ

6 голосов
/ 30 ноября 2011

Вот один из подходов, который вы можете использовать:

1) Создайте ваши отдельные формы как обычно, за исключением использования TLayout, назовите его «LayoutMain», (выровненный alClient) как родительский элемент всех элементов управления в этой форме.

2) В вашей «главной форме», когда вы хотите, чтобы экземпляр формы работал так, как если бы он был в качестве интерфейса MDI, создайте TLayout (назовите его «FormContainer» или что-то в этом роде), поместите какпотомок этого (выровненного по верху) другого TLayout (назовите его «FormHeader»), содержащего отдельные элементы управления для заголовка формы, кнопки «Свернуть», «Развернуть» / «Закрыть» и все, что вы хотели бы добавить в заголовок «фрейм». Это называется Составной .

3) Создайте экземпляр своей дочерней формы (, но не показывайте его ), затем укажите родительский TLayout этого экземпляра "LayoutMain" в TLayout "FormContainer" вашей главной формы.

4) В ранее упомянутом TLayout (с именем "FormHeader") дайте ему OnMouseDown иOnMouseMove событий, обеспечивающих возможность перетаскивания ее по мастер-форме.

Когда вы хотите максимизировать дочернюю форму внутри мастер-формы, вам просто нужно установить внешнее свойство выравнивания TLayout "FormContainer" в alClientне забывая сохранять свои исходные значения Top, Left, Width и Height в экземпляре формы, чтобы их можно было вызывать при нажатии кнопки Restore.

Да, это довольно сложное решение, но в лучшем случаенасколько мне известно, это единственный способ добиться того, что вы пытаетесь сделать с FireMonkey, как он существует сегодня ( около 2 ).

Я бы не ожидалEmbarcadero, чтобы обеспечить любую форму эмуляции MDI как части FireMonkey "из коробки", так как MDI считается старомодным подходом.

Более современным решением было бы использование Docking в качестве RAD Studio IDEсам делает.Это обеспечивает лучшее из обоих миров, предоставляя пользователю свободу выбора дочерних форм, которые он хочет связать с главной формой, или отображать их отдельно от них (или любую комбинацию закрепленных схем).

...