Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #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;
не помогает
Ответить с цитированием
  #2  
Старый 16.05.2014, 01:25
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Ну а метод Free что мешает применить?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 17.05.2014, 20:36
Аватар для Помидоркин
Помидоркин Помидоркин вне форума
Начинающий
 
Регистрация: 07.10.2012
Адрес: Дедовск
Сообщения: 110
Версия Delphi: Rio 10.3
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Ну а метод Free что мешает применить?
Разумеется, это первое, что я сделал. Во всяком случае в обработчике TFrmProfile.Close метод Free проблеммы не решает.
Ответить с цитированием
  #4  
Старый 21.05.2014, 10:29
Аватар для madMonia
madMonia madMonia вне форума
Новичок
 
Регистрация: 25.02.2014
Сообщения: 50
Версия Delphi: Delphi XE3
Репутация: 2545
По умолчанию

А что в методе CreateWithType происходит?

И, на всякий случай, о какой версии Delphi речь
__________________
Невозможно заточить карандаш тупым топором. Столь же тщетно пытаться сделать это десятком тупых топоров

Последний раз редактировалось madMonia, 21.05.2014 в 10:34.
Ответить с цитированием
  #5  
Старый 21.05.2014, 11:05
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Цитата:
Сообщение от madMonia
А что в методе CreateWithType происходит?

И, на всякий случай, о какой версии Delphi речь
В профиле же указано "Версия Delphi: Delphi 7"
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #6  
Старый 21.05.2014, 14:26
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Конструктор есть, а нет деструктора - при разрушении похоже сразу грохаются надстройки (методы) класса и до назначенного события дело не доходит, возможно срабатывает стандартный обработчик грохота, а это происходит в такой последовательности
Цитата:
OnCloseQuery -> OnClose -> OnDeactivate -> OnHide -> OnDestroy
т.е. посылка caFree идёт в холостую
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:25.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter