Когда форма невидима, ее освобождение приводит к освобождению ресурсов. Это нужно делать, если форма динамически создается во время выполнения приложения. Пользуйтесь методом 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,
Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script
] В вашей ситуации вы должны отказаться от такого кода: 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" когда угодно и сколько угодно раз. Не забывайте освобождать все формы перед завершением вашего приложения! |