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

Закрытие первой модальной формы в Delphi без закрытия второй

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

Заголовок: Закрытие первой модальной формы в Delphi без закрытия второй

Введение

При работе с модальными формами в Delphi может возникнуть проблема, когда необходимо закрыть первую модальную форму без закрытия второй. В этой статье мы рассмотрим, как решить эту проблему, используя примеры кода на Object Pascal (Delphi).

Описание проблемы

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

Решение проблемы

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

Пример кода, демонстрирующий этот подход:

DFM-файл:

object frm: Tfrm
  Left = 0
  Top = 0
  Caption = 'frm'
  ClientHeight = 194
  ClientWidth = 283
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object btnShow: TButton
    Left = 104
    Top = 132
    Width = 75
    Height = 25
    Caption = 'Show'
    TabOrder = 0
    OnClick = btnShowClick
  end
  object txt: TEdit
    Left = 8
    Top = 40
    Width = 121
    Height = 21
    TabOrder = 1
  end
end

Единица:

unit Unit1;

interface

uses
  System.SysUtils, System.Variants, System.Classes,
  Vcl.Controls, Vcl.Forms, Vcl.StdCtrls;

type
  Tfrm = class(TForm)
    btnShow: TButton;
    txt: TEdit;
    procedure btnShowClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  public
  end;

var
  frm: Tfrm;

implementation

{$R *.dfm}

procedure Tfrm.CreateParams(var Params: TCreateParams);
var
  Lfrm: TForm;
begin
  inherited CreateParams(Params);

  Lfrm := nil;
  if Owner is TControl then
    Lfrm := (GetParentForm(Owner as TControl, false) as TForm);
  if not Assigned(Lfrm) then
    Lfrm := Application.MainForm;

  if Assigned(Lfrm) and (Lfrm <> Self) then
    // Привязываем дочернее окно к родительскому окну.
    Params.WndParent := Lfrm.Handle;
end;

procedure Tfrm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if Self <> Application.MainForm then
    // Action caHide -> caFree
    Action := caFree;
end;

procedure Tfrm.btnShowClick(Sender: TObject);
var
  Lfrm: Tfrm;
begin
  Lfrm := Tfrm.Create(Self);
  Lfrm.Top := Top + 10;
  Lfrm.Left := Left + 10;
  // Так как вы хотите работать в родительском окне, дочернее окно не должно отображаться модально!
  Lfrm.Show;
end;

end.

Вывод

В этой статье мы рассмотрели проблему закрытия первой модальной формы в Delphi без закрытия второй и предложили альтернативный подход, заключающийся в отказе от использования модальных форм. Используя примеры кода на Object Pascal (Delphi), мы продемонстрировали, как показать формы без модальности, используя Show вместо ShowModal. Это позволяет пользователю работать с обеими формами независимо, разрешая закрытие первой модальной формы без закрытия второй.

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

Описание контекста: В статье рассматривается проблема закрытия первой модальной формы в 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:23:45/0.0036890506744385/0