Главная страница
    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.46 MB
Время: 0.032 c
1-1138221604
_цуи_
2006-01-25 23:40
2006.02.26
embeddedwb (документация)


8-1127057492
maVladimir
2005-09-18 19:31
2006.02.26
Коррекция цвета в Windows


2-1139476432
Id
2006-02-09 12:13
2006.02.26
Переход курсора после Tab


15-1138474536
LordOfRock
2006-01-28 21:55
2006.02.26
Back To The Future


2-1139325472
nts
2006-02-07 18:17
2006.02.26
LPT порт





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский