Когда форма невидима, ее освобождение приводит к освобождению ресурсов. Это нужно делать, если форма динамически создается во время выполнения приложения. Пользуйтесь методом Release, не Free.
Попробуйте следующий код:
unit Unit1;
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
Form2: TForm;
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
if Form2 <> nil then
begin
Form2.Release;
Form2:= nil;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if Form2 = nil then
begin
Form2 := TForm.Create(Application);
Form2.Show;
end;
end;
end.
[Francisco Torres, Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript.]
В вашей ситуации вы должны отказаться от такого кода:
begin
Application.Create(myForm);
Application.Run;
end.
И воспользоваться следующим:
face="Courier New" size="2"> begin myForm := TmyForm.Create(Application);
{ вставьте сюда нужный вам код }
myForm.Show; { ... или myForm.ShowModal }
{ вставьте сюда нужный вам код }
myForm.Hide; { ... если вы хотите скрыть ее } { вставьте сюда нужный вам код }
myForm.Free;
end. Вы можете использовать методы формы "Create" и "Free" когда угодно и сколько угодно раз.
Не забывайте освобождать все формы перед завершением вашего приложения!