Показать сообщение отдельно
  #1  
Старый 15.05.2014, 19:43
Аватар для Помидоркин
Помидоркин Помидоркин вне форума
Начинающий
 
Регистрация: 07.10.2012
Адрес: Дедовск
Сообщения: 110
Версия Delphi: Rio 10.3
Репутация: 10
По умолчанию Уничтожить динамически созданную форму

По клику на кнопке создаю новое окно (TFrmProfile = class(TForm), класс описан в другом юните)
Код:
unit Unit1;

//------bla-bla-bla------
var
  Form1: TForm1;
  FormNo: Byte;

implementation

//------bla-bla-bla------

procedure TForm1.Button1Click(Sender: TObject);
var F: TFrmProfile;
begin
//------bla-bla-bla------
 F:= TFrmProfile.CreateWithType(Application, MT);
 FormNo:= FormNo+1;
 F.Name:= 'Forma'+IntToStr(FormNo);
 ComboBox1.Items.Append(F.Name);
//------bla-bla-bla------
 F.Show;
 Label1.Caption:= IntToStr(Application.ComponentCount);
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
var i: Byte;
begin
 for i:= 0 to Application.ComponentCount-1 do
 begin
  if Application.Components[i].Name = ComboBox1.Text then
  (Application.Components[i] as TFrmProfile).Show;
 end;
end;
Label1.Caption показывает, что при закрытии динамически созданной формы, она не уничтожается, а просто скрывается (Hide)
Код:
(Application.Components[i] as TFrmProfile).Show;
делает ранее закрытую форму видимой.
Собственно задача изничтожить форму при закрытии.
Цитата:
Обработчик OnClose имеет параметр Action со следующими четырьмя возможными значениями: caNone - Форме не разрешено закрыться. caHide - Вместо закрытия, форма будет скрыта. caFree - Форма будет закрыта, и занятые ей ресурсы будут освобождены. caMinimize - Вместо закрытия, форма будет минимизирована.
отсюда логично проистекает:
Код:
unit MineForms;
//------bla-bla-bla------
  TFrmProfile = class(TForm)
//------bla-bla-bla------
  public
   constructor CreateWithType(AOwner: TComponent;
    AMetterType: TMetterType=mtPrutok; Dummy: Integer=0);
   procedure Close(Sender: TObject; var Action: TCloseAction);
  end;

implementation
//------bla-bla-bla------
procedure TFrmProfile.Close(Sender: TObject; var Action: TCloseAction);
begin
 Action:= caFree;
end;
не помогает
Ответить с цитированием