Текущий архив: 2006.02.26;
Скачать: CL | DM;
Вниз
Чем отличается автосоздание форм от создания вручную? Найти похожие ветки
← →
FormExplorer (2006-02-11 18:43) [0]Незнаю, правильно ли вопрос сформулировал, интересует вот что:
При вызове новой формы в проекте она должна быть в
Project->Options->Auto-create Forms
Тогда её вызывают
NewForm.ShowModal;
и закрывают
Close;
Если же переместить её в
Project->Options->Avialabel Forms
То она вызывается
NewForm:=TNewForm.Create(self);
NewForm.ShowModal;
и закрывается
Close;
В чём здесь разница? И какой способ предпочтительнее (меньше памяти расходует)?
И ещё, если форму вызывать не модально, а
NewForm.Show;
то правильно ли её закрывать
NewForm.Free;
?
← →
Reindeer Moss Eater © (2006-02-11 18:54) [1]Чем отличается автосоздание форм от создания вручную?
Ничем. Потому что создания "вручную" не существует.
← →
Eraser © (2006-02-11 18:57) [2]
> FormExplorer (11.02.06 18:43)
> В чём здесь разница? И какой способ предпочтительнее (меньше
> памяти расходует)?
в том что если форма создаётся автоматически, то на неё сразу расходуются ресурсы при старте приложения, не зависимо от того пользуешься ты ею или нет, если в ручную, то когда надо, тогда и создал.
> NewForm.Free;
вызывать Free, тем более из методов самой формы нельзя.
Самый правильный вариант это вызывать Close, а в обработчике OnClose вписать Action := caFree;
← →
Гаврила © (2006-02-11 19:01) [3]
> При вызове новой формы в проекте она должна быть в
> Project->Options->Auto-create Forms
при добавлении формы в список атосоздаваемых просто автоматически добавляется код ее создания (смотри в файле dpr - Application.Createform)
при вызове Close по умлочанию разрушение объекта не происходит, форма просто прячется.
С точки зрения экономии ресурсов, чаще всего целесообразно не держать объект в памяти постоянно, а создавать - разрушать по мере необхоимости
NewForm:=TNewForm.Create(self);
try
NewForm.ShowModal;
finally
NewForm.Free; //Разрушение объекта, освобождение памяти, которая была выделена при создании
end;
← →
Desdechado © (2006-02-11 19:57) [4]Автосоздание приводит к тому, что все такие формы болтаются в памяти. Плохо то, что они за весь сеанс работы с программой могут вообще не потребоваться. Хорошо то, что при необходимости их активизации не тратится время на создание. Также хорошо то, что к ним сразу после старта приложения можно обращаться. Кстати, Free в таком случае нельзя делать, ибо форма тогда будет уничтожена, а явного создания ее нет, значит, повторно ты в нее не попадешь - попытка вызовет AV.
Я предпочитаю создание по мере необходимости.
Гаврила © (11.02.06 19:01) [3]finally
NewForm.Free;
end;
лучше заменить наfinally
NewForm.Release;
end;
почему - читать справку
← →
Гаврила © (2006-02-11 21:38) [5]
> (11.02.06 19:57) [4]
> лучше заменить на
В большинстве случаев пофиг
← →
Desdechado © (2006-02-11 21:41) [6]> В большинстве случаев пофиг
у каждого свои любимы грабли
а у юзеров - еще и любимые грабли программистов
← →
FormExplorer (2006-02-12 18:16) [7]Спасибо!
Страницы: 1 вся ветка
Текущий архив: 2006.02.26;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.032 c