C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Автоматическое удаление объекта-потомка TForm, после того, как окно было закрыто
iAlexander
  Отправлено: 09.11.2004, 16:11


Дежурный стрелочник

Группа: Участник
Сообщений: 70



Здравствуйте.
Не знает ли кто механизма, позволяющего мне выполнить следующую вещь:
CODE

// создавать экземпляр необходимой формы
// в необходимый момент времени (окно сразу отобразится)
TNeedForm *NewForm = new TNeedForm(0);

Здесь память выделяется. Можно ли придумать схему, когда после закрытия окна, соответствующего экземпляру нашего TNeedForm, этот объект автоматически удалялся из памяти.
Можно сделать просто:
CODE

// создавать экземпляр необходимой формы (он сразу отобразится)
// в необходимый момент времени
TNeedForm *NewForm = new TNeedForm(0);
NewForm->ShowModal();
delete NewForm;

Недостаток в том, что форма-то модальная. И я не смогу нажатием на одну и ту же кнопку показать две такие формы, т.к. после отображения первой эта кнопка окажется недоступной.
Мне ничего в голову кроме создания списка созданных форм, оповещения этого списка при закрытии формы, и по таймеру удаления объекта, в голову не идет. Но сложновато, и не нравится мне здесь идея с таймером. Ну вот мало ли какие системы у клиентов. Может, закрываться окно будет 0,05 сек, а может, 5 мин.
Есть у кого-то светлые мысли? smile.gif
Guest
Отправлено: 09.11.2004, 16:38


Не зарегистрирован







Для освобождения памяти у метода Close есть специальный параметр
Konstantine
Отправлено: 09.11.2004, 16:43


Мастер участка

Группа: Модератор
Сообщений: 545



В ONClose или CloseQuery есть параметр CloseAction его в caFree установи и выходи из обработчика, и форма удалится
iAlexander
Отправлено: 09.11.2004, 17:38


Дежурный стрелочник

Группа: Участник
Сообщений: 70



Спасибо. Это я явно проморгал. Чтобы Билдер, да не имел таких средств... Нужно было самому поискать. Насчет автоматического показа — это я тоже поторопился (пробовал вчера поздно вечером, а сегодня по памяти вспоминал, чего там делал, и забыл, что я ставил Show() )
CODE
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{ Action = caFree; };

Кстати, админам: время на серваке переведите cool.gif

Отредактировано iAlexander — 09/11/2004, 18:46

Вернуться в Вопросы программирования в C++Builder