Главная страница
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.056 c
2-1139141002
hey
2006-02-05 15:03
2006.02.26
Абракадабра при копировании русских букв из ячеек грида


6-1132116706
SANEK_10289
2005-11-16 07:51
2006.02.26
Данные о погоде из Интернета


15-1138893375
psa247
2006-02-02 18:16
2006.02.26
Хороший фотопринтер !


15-1139304455
dr Tr0jan
2006-02-07 12:27
2006.02.26
Выбираю телевизор


2-1139399763
Aleksandr.
2006-02-08 14:56
2006.02.26
Как заставить SpeedButton показывать картинку в Enabled=false?