Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание форм 
:(
    Опции темы
 
как вы создаёте формы?
Не создаю, они создаются автоматически. [ 3 ]  [9.09%]
Application.CreateForm(TForm, Form); [ 9 ]  [27.27%]
Form := TForm.Create(Application) [ 9 ]  [27.27%]
Form := TForm.Create(nil) [ 2 ]  [6.06%]
Form := TForm.Create(self) [ 6 ]  [18.18%]
другое [ 4 ]  [12.12%]
Всего проголосовавших: 33
В этом опросе возможен один вариант ответа
Гости не могут голосовать 
Bose
  Дата 15.6.2006, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



Отлаживая свой проект, возник вопрос, о том, как лучше всего создавать формы, чтобы было проще отследить порядок их освобождения. Посему, решил затеять опрос. Будьте любезны уделить немного времени на ответ, и желательно обьяснение smile  
PM MAIL WWW Skype   Вверх
Matematik
Дата 15.6.2006, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 17
Всего: 50



Одно и тоже

Application.CreateForm(TForm, Form);   
Form := TForm.Create(Application) 
 
PM MAIL WWW ICQ   Вверх
Bose
Дата 15.6.2006, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



Мой ответ: 

В крупных MDI приложениях, я стараюсь создавать формы так 
Код

Form := TForm.Create(Application) 

или так 
Код

Form := TForm.Create(Application.MainForm)

А модальные формы(которые освобождаются сразу же после вызова) обычно создаю от активной 
Код

Form := TForm.Create(Self) 


 
PM MAIL WWW Skype   Вверх
vv3
Дата 15.6.2006, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 29.4.2006

Репутация: нет
Всего: нет



Owner'ом назначаю главную форму приложения, или ту, которая будет Parent'ом для создаваемой. 
PM MAIL   Вверх
bems
Дата 15.6.2006, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



Цитата(Matematik @  15.6.2006,  15:54 Найти цитируемый пост)
Одно и тоже

Application.CreateForm(TForm, Form);   
Form := TForm.Create(Application) 

Не совсем . Главной формой становиться первая созданная  Application.CreateForm. Если нужно показать форму до главной, то создавать ее нужно ее конструктором. 





А по теме - лучше всего первый вариант (автоматически). Идет все по накатанной и не напрягает мозги. Но как обычно есть интереснейшие исключения.
 


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Alexeis
Дата 15.6.2006, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



bems, Вообще-то автоматическое создание это самый нерациональный способ использования ресурсов. Так как большинство форм не работает в один и тотже момент, а ресурсы под них все равно выделяются, кроме того загрузка такого приложения значительно медленее. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
bems
Дата 15.6.2006, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



А такой ресурс как процессорное время?
Если все время что-то создавать/освобождать то это не работа, а сплошное ожидание. Если даже формы и не работают одновременно, то некоторые используются значительно чаще других. Или если форма легкая. Вобщем все зависит от конкретного случая. А если к меня в проекте число форм приближается к 15, то я начинаю задумываться, что я делаю неправильно. 


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Alexeis
Дата 15.6.2006, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



bems, Об удалении форм ни кто не говорил, кроме того от метода создания форм общее время загрузки всех форм не меняется, а Маленькие формы тем более создавать автоматически нет смысла, поскольку время их отображения почти совпадает со временем их создания(по крайней мере на взгляд пользователя).
Конечно, если форму один раз запустили, то вероятно ее могут запустить еще раз, а если нет, то длительная загрузка приложения будет лишний раз раздражать пользователя, тогда как быстрое появление главного окна наоборот обрадует и безусловно повысит часоту использования программы. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
bems
Дата 15.6.2006, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



Цитата(alexeis1 @  15.6.2006,  17:46 Найти цитируемый пост)
Конечно, если форму один раз запустили, то вероятно ее могут запустить еще раз, а если нет, то 

то все равно вероятно ее запустят 


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Alexeis
Дата 15.6.2006, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Я же писал
Цитата(alexeis1 @  15.6.2006,  16:46 Найти цитируемый пост)
 от метода создания форм общее время загрузки всех форм не меняется

А что касается 
Цитата(bems @  15.6.2006,  16:58 Найти цитируемый пост)
то все равно вероятно ее запустят 

то это зависит от типа приложения, например в micrsoft Word, за время работы я не вызываю и 5% всех ее форм, но при этом приложение является на мой взгляд очень функциональным и удобным
 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
bems
Дата 15.6.2006, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



Отчасти ты прав. Я тут задумался и понял ,что моя точка зрения именно такая потому, что большинство форм кроме главной у меня в основном применяются для изменения каких-то параметров программы и поэтому я объединяю формы с кодом который загружает и сохраняет эти настройки. Потребность загрузить настройки появляется раньше чем показать форму с контролами этих настроек. 


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Alex
Дата 16.6.2006, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Цитата(bems @  15.6.2006,  18:03 Найти цитируемый пост)
А по теме - лучше всего первый вариант (автоматически). Идет все по накатанной и не напрягает мозги. Но как обычно есть интереснейшие исключения.

Мда... не писали Вы под 9x системы и приложение форм на 20 хотя бы тоже не писали, а если и писали, то не задумывались, почему оно так долго стартует...

Цитата(bems @  15.6.2006,  19:15 Найти цитируемый пост)
Я тут задумался и понял ,что моя точка зрения именно такая потому, что большинство форм кроме главной у меня в основном применяются для изменения каких-то параметров программы и поэтому я объединяю формы с кодом который загружает и сохраняет эти настройки. Потребность загрузить настройки появляется раньше чем показать форму с контролами этих настроек. 

Бонально не грамотное построение программы, зачем вам объект формы для загрузки настроек? 


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Dynamic
Дата 16.6.2006, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 372
Регистрация: 5.7.2004
Где: Салехард

Репутация: 12
Всего: 15



Главная форма - автоматом, как дельфя генерирует
Остальные - в зависимости от предполагаемой частоты использования и области видимости. Например, есть диалоги, запрашивающие какие-то параметры у пользователя при создании отчета - зачем им жить постоянно? делаю примерно так:
Код

function GetReportParam(var aDate: TDate): boolean;
begin
  with TfmReportParam.Create(Application) do
  try
    КомпонентДаты.Date := aDate;
    Result := ShowModal = mrOk;
    if Result then
      aDate := КомпонентДаты.Date;
  finally
    Free;
  end;
end;

Есть формы, которые могут быть вызваны многократно, причем из разных мест программы, например, справочники. Эти я оставляю на auto create form.

Вобщем, все это - дело вкуса и количества форм. 3-5 форм в autocreate не задержат загрузку программы (если, конечно, не содержат в OnCreate "тяжелого" кода). 


--------------------
Было бы о чем молчать, а уж что сказать – всегда найдется...
PM MAIL WWW   Вверх
Guedda
Дата 16.6.2006, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



Главную форму создаю автоматически. Другие формы просто вызываю.
Код

MyForm2 := TMyForm2.Create(MainForm);
MyForm2.Show; //или ShowModal
 


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Bose
Дата 16.6.2006, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



Спасибо за комментарии :-)

Цитата(bems @  15.6.2006,  17:03 Найти цитируемый пост)
А по теме - лучше всего первый вариант (автоматически). Идет все по накатанной и не напрягает мозги. Но как обычно есть интереснейшие исключения.

Одно из исключений - это многоконность. Точнее случай, когда, одна и та же форма нужна в нескольких экземплярах.

Цитата(bems @  15.6.2006,  18:15 Найти цитируемый пост)
Отчасти ты прав. Я тут задумался и понял ,что моя точка зрения именно такая потому, что большинство форм кроме главной у меня в основном применяются для изменения каких-то параметров программы и поэтому я объединяю формы с кодом который загружает и сохраняет эти настройки. Потребность загрузить настройки появляется раньше чем показать форму с контролами этих настроек. 

не очень эффективное решение имхо smile 

По-моему, всё-таки, самый эффективный способ - это создание форм с Owner:=Application или Owner:=Application.MainForm. Особенно если в проекте, классов форм больше 30, и некоторые из них могут открываться в нескольких экземплярах(MDI). 

И ещё возник такой вопрос - что происходит с формой созданной как Form := TForm.Create(nil). Если её не освобождать "ручками", то в какой момент она будет освобождена? 
PM MAIL WWW Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1145 ]   [ Использовано запросов: 24 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.