Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.48 MB
Время: 0.026 c
4-1134017008
Strech
2005-12-08 07:43
2006.02.26
Незащищенные секции программы


2-1139620367
Ламерище
2006-02-11 04:12
2006.02.26
Отправить файл на мыло


9-1124963548
red_readers
2005-08-25 13:52
2006.02.26
Помогите с сюжетом


15-1138014947
Laymer
2006-01-23 14:15
2006.02.26
Web - server


15-1139146592
antonn
2006-02-05 16:36
2006.02.26
что вы думаете о http://www.certifications.ru/ ?