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

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

Чем отличается автосоздание форм от создания вручную?


FormExplorer ©   (2006-02-11 18:43:00) 

Незнаю, правильно ли вопрос сформулировал, интересует вот что:

При вызове новой формы в проекте она должна быть в
Project->Options->Auto-create Forms

Тогда её вызывают
 NewForm.ShowModal;

и закрывают
 Close;

Если же переместить её в
Project->Options->Avialabel Forms

То она вызывается
 NewForm:=TNewForm.Create(self);
 NewForm.ShowModal;

и закрывается
 Close;

В чём здесь разница? И какой способ предпочтительнее (меньше памяти расходует)?

И ещё, если форму вызывать не модально, а  
 NewForm.Show;
то правильно ли её закрывать
 NewForm.Free;
?


FormExplorer   (2006-02-12 18:16:00) [1]

Спасибо!


Desdechado   (2006-02-11 21:41:00) [2]

> В большинстве случаев пофиг
у каждого свои любимы грабли
а у юзеров - еще и любимые грабли программистов


Гаврила   (2006-02-11 21:38:00) [3]


>  (11.02.06 19:57) [4]


> лучше заменить на


В большинстве случаев пофиг


Desdechado   (2006-02-11 19:57:00) [4]

Автосоздание приводит к тому, что все такие формы болтаются в памяти. Плохо то, что они за весь сеанс работы с программой могут вообще не потребоваться. Хорошо то, что при необходимости их активизации не тратится время на создание. Также хорошо то, что к ним сразу после старта приложения можно обращаться. Кстати, Free в таком случае нельзя делать, ибо форма тогда будет уничтожена, а явного создания ее нет, значит, повторно ты в нее не попадешь - попытка вызовет AV.

Я предпочитаю создание по мере необходимости.

Гаврила ©   (11.02.06 19:01) [3]
finally
NewForm.Free;
end;

лучше заменить на
finally
NewForm.Release;
end;

почему - читать справку


Гаврила   (2006-02-11 19:01:00) [5]


> При вызове новой формы в проекте она должна быть в
> Project->Options->Auto-create Forms

при добавлении формы в список атосоздаваемых просто автоматически добавляется код ее создания (смотри в файле dpr - Application.Createform)

при вызове  Close по умлочанию разрушение объекта не происходит, форма просто прячется.
С точки зрения экономии ресурсов, чаще всего целесообразно не держать объект в памяти постоянно, а создавать - разрушать по мере необхоимости
NewForm:=TNewForm.Create(self);
try
 NewForm.ShowModal;
finally
NewForm.Free; //Разрушение объекта, освобождение памяти, которая была выделена при создании
end;


Eraser   (2006-02-11 18:57:00) [6]


> FormExplorer   (11.02.06 18:43)


> В чём здесь разница? И какой способ предпочтительнее (меньше
> памяти расходует)?

в том что если форма создаётся автоматически, то на неё сразу расходуются ресурсы при старте приложения, не зависимо от того пользуешься ты ею или нет, если в ручную, то когда надо, тогда и создал.

> NewForm.Free;

вызывать Free, тем более из методов самой формы нельзя.
Самый правильный вариант это вызывать Close, а в обработчике OnClose вписать Action := caFree;


Reindeer Moss Eater   (2006-02-11 18:54:00) [7]

Чем отличается автосоздание форм от создания вручную?

Ничем. Потому что создания "вручную" не существует.


Наверх

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