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

"Реализация местно-модальных диалогов в приложении с несколькими модулями на Delphi"

Delphi , Программа и Интерфейс , Модальные формы

Реализация местно-модальных диалогов в приложении с несколькими модулями на Delphi

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

В данной статье мы рассмотрим, как реализовать местно-модальные диалоги в приложении с несколькими модулями на Delphi. Местно-модальный диалог блокирует только текущий модуль, в котором он был открыт, позволяя пользователю свободно переключаться между другими модулями и продолжать работу в них. При возврате к модулю, в котором был открыт диалог, пользователь должен закрыть его, прежде чем продолжить работу в этом модуле.

Решение

Для реализации местно-модальных диалогов мы будем использовать базовый класс для всех диалогов TAttracsForm и добавим в него метод ShowLocalModal. Также нам понадобится класс-менеджер TViewManager, который будет отвечать за добавление, удаление и активацию модулей.

  1. Добавьте в класс TViewManager два новых метода: LockCurrentView и UnLockCurrentView.
type
  TChildTemplate = class(TForm)
    // ...
  end;

  TViewManager = class
  private
    FCurrentView: TChildTemplate;
    // ...
  public
    procedure LockCurrentView;
    procedure UnLockCurrentView(aCallerForm: TChildTemplate);
    // ...
  end;

implementation

procedure TViewManager.LockCurrentView;
begin
  Result := FCurrentView;
  Result.Enabled := False;
  Result.VMDeactivate; // Деактивировать меню и панель инструментов для этого модуля
end;

procedure TViewManager.UnLockCurrentView(aCallerForm: TChildTemplate);
begin
  aCallerForm.VMActivate; // Активировать меню и панель инструментов для этого модуля
  aCallerForm.Enabled := True;
end;
  1. Переопределите метод FormClose в классе TAttracsForm и добавьте новый метод ShowLocalModal.
type
  TAttracsForm = class(TForm)
  private
    FCallerForm: TChildTemplate;
    FOnAfterDestruction: TNotifyEvent;
    // ...
  public
    procedure FormClose(Sender: TObject; var Action: TCloseAction); override;
    procedure ShowLocalModal(aNotifyAfterClose: TNotifyEvent);
    // ...
  end;

implementation

procedure TAttracsForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if Assigned(FCallerForm) then
  begin
    ClientMainForm.ViewManager.UnLockCurrentView(FCallerForm as TChildTemplate);

    if Assigned(FOnAfterDestruction) then
      FOnAfterDestruction(Self);

    Action := caFree;
  end;
end;

procedure TAttracsForm.ShowLocalModal(aNotifyAfterClose: TNotifyEvent);
begin
  FCallerForm := ClientMainForm.ViewManager.LockCurrentView; // Блокировать текущий модуль и вернуть его
  PopupParent := FCallerForm;
  FOnAfterDestruction := aNotifyAfterClose;
  Show;
end;
  1. В модулях, которые наследуются от TChildTemplate, вызывайте метод ShowLocalModal для отображения местно-модального диалога.
procedure TMyModule.Button1Click(Sender: TObject);
begin
  with TAttracsForm.Create(nil) do
  try
    // Настройте диалог перед отображением
    ShowLocalModal(
      procedure()
      begin
        // Выполните действия после закрытия диалога
      end);
  finally
    Free;
  end;
end;

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

Заключение

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

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

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


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

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




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


:: Главная :: Модальные формы ::


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-10-23 12:30:16/0.005897045135498/1