Переключение поведения приложения GUI между SDI и MDI

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

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

alt-текст http://i46.tinypic.com/5l0ykw.png

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

4 ответов


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

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

не преобразовывайте окна в рамки. Это плохое решение.

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

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


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

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


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


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

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

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

только мои 2 пенса стоимость.