Первое, что вам следует уяснить, это то, что когда вы в дизайнере разрабатываете форму, вы разрабатываете не одну конкретную форму, а целый класс. И экземпляров (объектов) этого класса вы можете создать столько, сколько захотите. Единственным ограничением при этом являются ресурсы вашего компьютера.
Если привести аналогию с автомобилем, то вы не Самоделкин, который в своём гараже делает свой собственный автомобиль в единственном экземпляре, а конструктор на заводе, который разрабатывает новую модель автомобиля и по этим чертежам потом на конвейере можно будет собрать любое нужное количество автомобилей этой марки.
То, что среда вам любезно автоматически создаёт один экземпляр вашего класса формы - это помощь начинающим и не более того. И эта помощь скорее вредит, нежели помогает, сбивая с толку тех, кто только начинает знакомиться со средой.
Что касается вашего вопроса, то его можно интерпретировать двояко:
1. Как создать несколько форм этого класса.
2. Как отобразить один и тот-же экземпляр, потом спрятать его, не уничтожая, а потом снова отобразить.
Приведу готовый пример приложения:
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' ,
Unit2 in 'Unit2.pas' ;
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
uses Unit2;
procedure TForm1.Button1Click(Sender: TObject);
var
Fms: array of TForm2;
i: Integer;
begin
SetLength(Fms, 100);
ShowMessage('Сейчас мы создадим ' + IntToStr(Length(Fms)) +
' форм класса TForm2 и покажем их в немодальном режиме');
for i := Low(Fms) to High(Fms) do
begin
Fms[i] := TForm2.Create(Application);
Fms[i].Caption := Fms[i].Caption + ' - Экземпляр ' + IntToStr(i+1);
Fms[i].Show;
end;
ShowMessage('Cейчас мы их закроем без уничтожения');
for i := Low(Fms) to High(Fms) do
Fms[i].Close;
ShowMessage('А сейчас уничтожим');
for i := Low(Fms) to High(Fms) do
Fms[i].Free;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
F: TForm2;
begin
F := TForm2.Create(Application);
F.Caption := 'TForm2 в модальном режиме';
F.ShowModal;
ShowMessage('Вы закрыли форму, но форма ещё существует, сейчас мы покажем её ещё раз');
F.ShowModal;
F.Free;
ShowMessage('Сейчас мы создадим другой экземпляр TForm2 и покажем в модальном режиме');
with TForm2.Create(Application) do
begin
Caption := 'Другой экземпляр TForm2 в модальном режиме';
ShowModal;
Free;
end;
end;
end.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm2 = class(TForm)
private
public
end;
implementation
end.
Ещё ссылки:
»вопрос 1 теста №12 Рыцарской Квинтаны «
»вопрос КС №58245«
»вопрос КС №59674«
»вопрос КС №55309«
»вопрос КС №50002«
»вопрос КС №61703«
»вопрос КС №49724«
По этим ссылкам далеко не всё напрямую относится к этому вопросу, но первую и две последних настоятельно рекомндую к просмотру... |