| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Создание форм |
| Автор: Bose 15.6.2006, 15:49 |
| Отлаживая свой проект, возник вопрос, о том, как лучше всего создавать формы, чтобы было проще отследить порядок их освобождения. Посему, решил затеять опрос. Будьте любезны уделить немного времени на ответ, и желательно обьяснение |
| Автор: Matematik 15.6.2006, 15:54 |
| Одно и тоже Application.CreateForm(TForm, Form); Form := TForm.Create(Application) |
| Автор: Bose 15.6.2006, 15:54 | ||||||
| Мой ответ: В крупных MDI приложениях, я стараюсь создавать формы так
или так
А модальные формы(которые освобождаются сразу же после вызова) обычно создаю от активной
|
| Автор: vv3 15.6.2006, 15:56 |
| Owner'ом назначаю главную форму приложения, или ту, которая будет Parent'ом для создаваемой. |
| Автор: Alexeis 15.6.2006, 17:23 |
| bems, Вообще-то автоматическое создание это самый нерациональный способ использования ресурсов. Так как большинство форм не работает в один и тотже момент, а ресурсы под них все равно выделяются, кроме того загрузка такого приложения значительно медленее. |
| Автор: bems 15.6.2006, 17:35 |
| А такой ресурс как процессорное время? Если все время что-то создавать/освобождать то это не работа, а сплошное ожидание. Если даже формы и не работают одновременно, то некоторые используются значительно чаще других. Или если форма легкая. Вобщем все зависит от конкретного случая. А если к меня в проекте число форм приближается к 15, то я начинаю задумываться, что я делаю неправильно. |
| Автор: Alexeis 15.6.2006, 17:46 |
| bems, Об удалении форм ни кто не говорил, кроме того от метода создания форм общее время загрузки всех форм не меняется, а Маленькие формы тем более создавать автоматически нет смысла, поскольку время их отображения почти совпадает со временем их создания(по крайней мере на взгляд пользователя). Конечно, если форму один раз запустили, то вероятно ее могут запустить еще раз, а если нет, то длительная загрузка приложения будет лишний раз раздражать пользователя, тогда как быстрое появление главного окна наоборот обрадует и безусловно повысит часоту использования программы. |
| Автор: bems 15.6.2006, 17:58 | ||
то все равно вероятно ее запустят |
| Автор: Alexeis 15.6.2006, 18:07 | ||
Я же писал
А что касается то это зависит от типа приложения, например в micrsoft Word, за время работы я не вызываю и 5% всех ее форм, но при этом приложение является на мой взгляд очень функциональным и удобным |
| Автор: bems 15.6.2006, 18:15 |
| Отчасти ты прав. Я тут задумался и понял ,что моя точка зрения именно такая потому, что большинство форм кроме главной у меня в основном применяются для изменения каких-то параметров программы и поэтому я объединяю формы с кодом который загружает и сохраняет эти настройки. Потребность загрузить настройки появляется раньше чем показать форму с контролами этих настроек. |
| Автор: Alex 16.6.2006, 09:54 | ||||
Мда... не писали Вы под 9x системы и приложение форм на 20 хотя бы тоже не писали, а если и писали, то не задумывались, почему оно так долго стартует...
Бонально не грамотное построение программы, зачем вам объект формы для загрузки настроек? |
| Автор: Dynamic 16.6.2006, 11:31 | ||
| Главная форма - автоматом, как дельфя генерирует Остальные - в зависимости от предполагаемой частоты использования и области видимости. Например, есть диалоги, запрашивающие какие-то параметры у пользователя при создании отчета - зачем им жить постоянно? делаю примерно так:
Есть формы, которые могут быть вызваны многократно, причем из разных мест программы, например, справочники. Эти я оставляю на auto create form. Вобщем, все это - дело вкуса и количества форм. 3-5 форм в autocreate не задержат загрузку программы (если, конечно, не содержат в OnCreate "тяжелого" кода). |
| Автор: Guedda 16.6.2006, 12:12 | ||
Главную форму создаю автоматически. Другие формы просто вызываю.
|
| Автор: Bose 16.6.2006, 19:05 | ||||
Спасибо за комментарии :-)
Одно из исключений - это многоконность. Точнее случай, когда, одна и та же форма нужна в нескольких экземплярах.
не очень эффективное решение имхо По-моему, всё-таки, самый эффективный способ - это создание форм с Owner:=Application или Owner:=Application.MainForm. Особенно если в проекте, классов форм больше 30, и некоторые из них могут открываться в нескольких экземплярах(MDI). И ещё возник такой вопрос - что происходит с формой созданной как Form := TForm.Create(nil). Если её не освобождать "ручками", то в какой момент она будет освобождена? |
| Автор: Alex 16.6.2006, 19:16 | ||
Если я ничего не путаю, то получается, что owner у нее не задан и она в обще не получит сообщения, о том, что должна уничтожиться и занимаемую ей память уже будет чистить винда сама за приложением, по сути это утечка памяти. |
| Автор: Bose 16.6.2006, 19:31 | ||
т.е. Borland Memory managaer её не убъёт при закрытии приложения? |
| Автор: Alex 16.6.2006, 20:48 | ||
Утверждать, со 100% уверенностью не могу, но все же мне кажется винда будет убивать их когда будет чистить за приложением, хотя возможно и менеджер памяти Борланд. В любом случаи созданные вами объекты Вы сами и должны уничтожать Добавлено @ 20:54 А что касается создания, то я в 99% случаях для модальных форм пишу приблизительно так:
Хотя в текущем проекте это все обычно оформляется как процедура |
| Автор: DragonFire 16.6.2006, 21:14 |
| Пользуюсь окнами а не формами... Создаю при помощи CreateWindowEx... |
| Автор: Демо 16.6.2006, 21:15 |
Все ресурсы, выделенные в приложении, будут освобождены при завершении процесса. Одно исключения я знаю - это атомы. По теме топика - все зависит от контекста программы. |
| Автор: Dynamic 19.6.2006, 06:31 |
BMM никого и ничего сам не убивает, он управляет памятью, а не приложением. |