Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];

Вниз

Чем отличается автосоздание форм от создания вручную?   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.08 c
6-1132258793
Иван12345
2005-11-17 23:19
2006.02.26
Передача информации о постоянной активности приложения


1-1138120988
буратино
2006-01-24 19:43
2006.02.26
TWebBrowser


2-1139229210
webpauk
2006-02-06 15:33
2006.02.26
Описание структуры


15-1139069415
Vemer
2006-02-04 19:10
2006.02.26
Как побороть "Не найдена страница поиска!" в IE?


11-1120320117
La Stik
2005-07-02 20:01
2006.02.26
Combobox





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский