Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Корректное уничтожение форм, созданных в runtime...


3APA3A ©   (2004-08-20 15:03:00) 

Есть процедура
   for i := 1 to ... do TForm1.Create(nil).Show;

 В обработчике TForm1.OnClose написано
   Self.Free;

 Корректно ли здесь возвращается память?
 Просто лень возится с массивом типа TForm1 и т.д.


s999   (2004-08-20 15:31:00) [1]


> > То есть - если я напишу Action := caFree - все будет нормально?
>
>
> Да.


Хотя, тут есть забавный момент. Если ты где-нибудь далее, в обработчиках,   напишешь:

Application.ProcessMessages;

То... можешь вернуться к ситуации с которой начал топик :))


Anatoly Podgoretsky   (2004-08-20 15:26:00) [2]

TUser ©   (20.08.04 15:22) [12]
Из самого Close :-)


s999   (2004-08-20 15:26:00) [3]


> То есть - если я напишу Action := caFree - все будет нормально?


Да.


3APA3A   (2004-08-20 15:24:00) [4]

Да... Не виртуальный... Только сейчас удосужился посмотреть...
То есть - если я напишу Action := caFree - все будет нормально?


TUser   (2004-08-20 15:22:00) [5]

Self.Close не прокатит?


s999   (2004-08-20 15:21:00) [6]

Эх... Free не виртуальный, поэтому твой код отработает только при твоем же явном вызове. Если хочешь все-таки убедится, то вставляй в Destroy.


Суслик   (2004-08-20 15:20:00) [7]

ну полиформизм типа?
free не виртаульнаый метод.


3APA3A   (2004-08-20 15:19:00) [8]

Представляю. А конкретнее?


Суслик   (2004-08-20 15:17:00) [9]


>  MessageBox не вылезает при закрытии формы из чего я делаю
> вывод  что Free не вызывается...

зря делаете.
Принцыпы ООП представляете?


3APA3A   (2004-08-20 15:16:00) [10]

метод Free не вызывается при Action := caFree;
 пишу
   procedure TForm1.Free;
   begin  
     MessageBox(0, 'Free', nil, MB_TOPMOST);
     inherited Free;
   end;

 MessageBox не вылезает при закрытии формы из чего я делаю вывод  что Free не вызывается...


HSolo   (2004-08-20 15:15:00) [11]

[3] в обработчике OnClose


Суслик   (2004-08-20 15:13:00) [12]


> 3APA3A ©   (20.08.04 15:12) [4]

ну типа [3]


3APA3A   (2004-08-20 15:12:00) [13]

to Sandman25
   хорошо, создам я ее как TForm1.Create(Application).
   а как мне вызвать Free при WM_Close?

 to Anatoly Podgoretsky
   благодарю за очень содержательный ответ.


Anatoly Podgoretsky   (2004-08-20 15:06:00) [14]

Сам себе харакири делаешь.


ламер   (2004-08-20 15:06:00) [15]

Action := caFree;


Sandman25   (2004-08-20 15:04:00) [16]

TForm1.Create(Application)

и не надо будет возиться.

> Корректно ли здесь возвращается память?

Нет


Наверх

Титульная страница Поиск, карта сайта Написать письмо