Когда форма невидима, ее освобождение приводит к освобождению ресурсов. Это нужно делать, если форма динамически создается во время выполнения приложения. Пользуйтесь методом 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, ftorres@cenpes.petrobras.gov.br]
В вашей ситуации вы должны отказаться от такого кода:
begin Application.Create(myForm); Application.Run; end. |
И воспользоваться следующим:
begin myForm := TmyForm.Create(Application); { вставьте сюда нужный вам код } myForm.Show; { ... или myForm.ShowModal } { вставьте сюда нужный вам код } myForm.Hide; { ... если вы хотите скрыть ее } { вставьте сюда нужный вам код } myForm.Free; end. |
Вы можете использовать методы формы "Create" и "Free" когда угодно и сколько угодно раз.
Не забывайте освобождать все формы перед завершением вашего приложения! [001756]