![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Чем отличается автосоздание форм от создания вручную?
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]Чем отличается автосоздание форм от создания вручную?
Ничем. Потому что создания "вручную" не существует.