26 мая 2023

Новая жизнь MDI-приложений в Delphi 12

    Приложения с многодокументным интерфейсом (MDI – multiple document interface) предоставляют пользователям оконный интерфейс, в котором большинство окон расположены внутри одного главного окна (как правило исключением являются только модальные окна). Когда-то этот способ организации графического интерфейса пользователя был очень популярен. Но ему на смену давно пришли SDI (single document interface, однодокументный интерфейс) и TDI (tabbed document interface, многодокументный интерфейс с вкладками). Так как на Delphi поддерживается множество старых проектов, то разработчики из Embarcadero R&D были вынуждены в новой версии RAD Studio уделить внимание MDI.
    По информации Марко Канту, в Delphi 12 нас ждут как минимум два новшества для работы с MDI. Во-первых, MDI-приложения получат полную поддержку стилей с высоким разрешением. В качестве примера приводится, как будет выглядеть MDI-приложение с использованием HighDPI VCL-стилей Glow и Aqua Light Slate:
Glow VCL style в MDI-приложении на Delphi 12
Glow VCL style в MDI-приложении на Delphi 12
Aqua Light Slate VCL style в MDI-приложении на Delphi 12
Aqua Light Slate VCL style в MDI-приложении на Delphi 12

Во-вторых, TFormTabsBar, который позволит размещать на вкладках любые формы, в том числе и дочерние MDI-окна. Вероятно, это можно назвать поддержкой TDI в Delphi.
Delphi 12 TFormTabsBar MDI demo

    Помню, как много лет тому назад мне достался легаси проект, в котором было несколько приложений: одно "главное" – MDI и несколько "второстепенных" – TDI. "Главное" приложение включало почти весь функционал "второстепенных". Авторы проекта ни чего лучше не придумали, как реализовывать функционал в "главном" приложении, а потом дублировать контролы и код его MDIChild-форм на вкладки "второстепенных" приложений. При этом копии файлов с модальными формами раскладывались в каталог каждого приложения. Представьте, как трудозатратно поддерживать проект, когда каждое изменение надо вносить сразу в несколько форм. Поэтому я избавился от этого дублирования и новая версия "второстепенных" приложений создавала MDIChild-формы "главного" приложения на своих вкладках. Если бы в Delphi 7 уже был TFormTabsBar и авторы проекта им воспользовались, то мне не пришлось бы тратить время на чистку этих авгиевых конюшен.

Комментариев нет:

Отправить комментарий