Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

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

Delphi , Программа и Интерфейс , MDI приложения

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

Подход к решению проблемы

Для создания многооконного приложения с использованием FireMonkey в стиле MDI, можно использовать следующий метод:

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

  2. На основной форме, когда вы хотите включить экземпляр формы для поведения, соответствующего MDI-интерфейсу, создайте TLayout (например, FormContainer), разместите его в качестве дочернего элемента с выравниванием к верху (alTop) иного TLayout (например, FormHeader), содержащего элементы управления для заголовка формы, кнопок минимизации/максимизации/закрытия и другие элементы, которые вы хотели бы видеть в заголовке "рамки". Это называется композитом.

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

  4. Для TLayout с именем FormHeader добавьте события OnMouseDown и OnMouseMove, чтобы обеспечить возможность перемещения его по основной форме.

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

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

Следует отметить, что, скорее всего, Embarcadero не предоставит какую-либо эмуляцию MDI в составе FireMonkey "из коробки", так как подход MDI считается устаревшим.

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

Пример кода

unit Unit1;

interface

uses
  Winapi.Windows, System.SysUtils, Vcl.Controls, Vcl.Forms, Vcl.ExtCtrls;

type
  TForm1 = class(TForm)
    LayoutMain: TLayout;
    FormContainer: TLayout;
    FormHeader: TLayout;
    procedure FormCreate(Sender: TObject);
    procedure LayoutMainMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure LayoutMainMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Int32; var Handled: Boolean);
  end;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  // Инициализация элементов управления и логика создания композита
end;

procedure TForm1.LayoutMainMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  // Логика начала перемещения композита
end;

procedure TForm1.LayoutMainMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Int32; var Handled: Boolean);
begin
  // Логика перемещения композита
end;

end.

Заключение

Разработка многооконных приложений с использованием FireMonkey требует от разработчика креативного подхода и готовности использовать нестандартные решения. Несмотря на отсутствие встроенной поддержки MDI, разработчики могут использовать композиты и докинг для создания функциональных многооконных интерфейсов, соответствующих современным требованиям пользователей.

Создано по материалам из источника по ссылке.

Вопрос о создании многооконных приложений с использованием FireMonkey и альтернативные подходы к реализации MDI-подобных интерфейсов в отсутствие традиционных MDI-контролов.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: MDI приложения ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-03-15 07:46:14/0.0064949989318848/0