Поведение интерфейса графического интерфейса между SDI и MDI

В настоящее время у меня есть приложение SDI, созданное с использованием Delphi 7, и я хочу, чтобы конечный пользователь выбирал тип интерфейса между SDI и MDI во время выполнения. мой вопрос, как я могу изменить поведение приложения между SDI и MDI во время выполнения?

В настоящее время я знаю несколько приложений, созданных с помощью Delphi, которые позволяют это: EMS SQL Manager и TOAD.

alt text

заранее спасибо.

Ответы

Ответ 1

Загрузите Jedi JVCL и установите его и посмотрите на Demos для JvDocking "стыковка в коде". Они делают это точно.

Они означают, что вы фактически не используете FormStyle = fsMDIChild, если не хотите много проблем. MDI "эмулируется", когда вам это нужно, путем стыковки кода.

Не конвертируйте окна в фреймы. Это плохое решение.

Для MDI-подобной среды, у которой нет проблем с MDI, используйте док-решение (компоненты коммерческого или открытого источника, поддерживающие стыковку). Я использую JvDocking, который включен в JEDI JVCL, который является бесплатным и открытым исходным кодом.

Вы используете свои формы в режимах "пристыкованный" и "отстыкованный" (плавающий), и это дает вам пристыкованный внешний вид IDE (VIsual Studio и RAD Studio) и незакрепленный IDE Look and feel (RAD Studio в отстыкованный или классический delphi 7).

Ответ 2

Я бы преобразовал мои текущие окна в фреймы и поместил эти фреймы с помощью align = alClient в либо дочерние окна mdi, либо в обычные окна, как это было настроено.

Но будьте осторожны: я никогда не делал этого, поэтому могут быть проблемы, о которых я не знаю.

Ответ 3

Во время выполнения установите TForm.FormStyle либо в fsNormal, либо в fsMDIChild в зависимости от того, хотите ли вы SDI или MDI.

Ответ 4

Как и решение @WarrenP, я настоятельно рекомендую решение для стыковки. Надо сказать, что для достижения этого вам не нужно использовать Jedi VCL. В качестве примера здесь есть очень простой (все-родной-vcl) компонент, который я создал, который позволяет просто набрать столько экземпляров, сколько вашей формы и установите их выравнивание, чтобы включить стыковку (и вкладку стыковки) в этих регионах.

MDI сам по себе является несчастным случаем, ожидающим места. Есть решения для достижения "внешнего вида MDI" без использования MDI, хотя мне еще предстоит встретить один, который я считаю "опрятным" (вероятно, из-за отсутствия взгляда).

В конечном счете, вы, вероятно, должны сомневаться в мудрости предоставления MDI в качестве опции. Стыковка (с возможностью отсоединения или без нее, и особенно, когда Tabbed Docking - это определенный пользователем вариант) чувствует себя более современно и (сделано правильно) может быть намного более гибкой и интуитивной, чем MDI когда-либо была.

Просто моя 2-пенсовая ценность.