По сути, я смотрю на доступ к другой форме из типа формы fsMDIChild через TButton. Но я понял, что доступ к форме - это еще один fsMDIChild, - это будет более трудным и очень много соображений.
Я нашел решение, сохранив форму для доступа как тип формы fsNormal вместо fsMDIChild. Это практически служит моим намерениям - ограничить доступ к другим открытым формам, таким как parent и child1, пока не закроется обычная форма.
Вот обновленный код, который работает для меня:
Родительская форма ChildForm.
unit Parent_u;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Menus;
type
TParentForm = class(TForm)
mm1: TMainMenu;
miOpenChild1: TMenuItem;
procedure miOpenChild1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
ParentForm: TParentForm;
implementation
uses
Child1_u;
{$R *.dfm}
procedure TParentForm.miOpenChild1Click(Sender: TObject);
var
vChildForm1 : TChildForm1;
begin
vChildForm1 := TChildForm1.Create(Self);
miOpenChild1.Enabled := False;
end;
end.
Ниже ChildForm, который должен получить доступ к NormalForm через TButton.
unit Child1_u;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TChildForm1 = class(TForm)
btnOpenForm11: TButton;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure btnOpenForm11Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
ChildForm1: TChildForm1;
implementation
uses
Parent_u, NormalForm_u;
{$R *.dfm}
procedure TChildForm1.btnOpenForm11Click(Sender: TObject);
begin
NormalForm.ShowModal;
end;
procedure TChildForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Parent_u.ParentForm.miOpenChild1.Enabled := True;
Action := caFree;
end;
end.
Нормальная форма, к которой здесь следует обращаться.
unit NormalForm_u;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs;
type
TNormalForm = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
NormalForm: TNormalForm;
implementation
{$R *.dfm}
end.