![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Какой вариант использования форм наиболее оптимален? [D5]
lipskiy © (2002-11-01 01:24:00)Мне известны три варианта использования форм со своими контролами. Первый - создать все в дизайн-тайме и не париться. Но при этом вся форма (а мне нужна форма настроек программы - с кучей контролов) всегда сидит в памяти и кушает ресурсы. Второй вариант - также создать форму в дизайн-тайме, но отменить автокрейт и крейтить при вызове, а при гашении освобождать. При этом в ехешник будут скомпилированы все свойства контролов со значениями по умолчанию, даже если я их не использую, получается лишний объем ехе-файла. Третий вариант - создавать форму полностью динамически, ничего не рисуя в дизайн-тайме. Это, имхо, наиболее экономично но жутко неудобно.
Как же все-таки ПРАВИЛЬНО создавать изобилующие контролами формы, которые редко вызываются при работе?
Плюс к этому я хочу на форме настроек переключать множество вкладок с группами настроек, и при этом чтобы в памяти в данный момент сидели только те контролы, которые отображаются, а контролы других вкладок не существовали бы (самих вкладок не видно, это стиль формы настроек с выбором групп посредством TreeView).
И вот еще. Не могу понять, в чем ошибка при создании формы.
В отдельном юните описано:
type
TFormTunes = class (TForm)
end;
var FormTunes : TFormTunes;
В главном юните по кнопке вызываю:
Application.CreateForm(TFormTunes, FormTunes);
Или так:
FormTunes:= TFormTunes.Create(nil);
Вылетает эксепшен - типа ресурс TFormTunes не найден.
Чего я не верно сделал-то?
reonid (2002-11-01 13:41:00) [21]Если без дфм - то действительно надо пользоваться CreateNew.
Потому что Create пытается загрузить одноимённый ресурс.
А насчёт главной формы - она обычно создана в дизайнере и имеет дфм.
(И в её модуле стоит {$R *.DFM} - попробуй, убери :-Р )
Если у тебя много форм похожего внешнего облика и функциональности -
то ты можешь сделать одну заготовку
и специальный объект - менеджер внешнего облика(и поведения),
который будет настраивать форму для конкретного применения,
создавать при необходимости доп. контролы и устанавливать
обработчики.
Насчёт вкладок и тривью - ты можешь сделать каждую
вкладку на отдельной форме, по нажатию на соответствующий
узел создавать нужную форму (уничтожив предыдущую),
загружать в эту форму соответствующие данные и делать её парентом основную форму (на которой лежит тривью).
lipskiy (2002-11-01 13:09:00) [22]Нет dfm файла. Я чисто руками хочу сделать форму целиком. Так мне кажется наиболее оптимально.
> Описания класса и обявление переменной класса должны быть
> в интерфейсном разделе подчиненного модуля.
Так и сделано.
> Во-вторых, просто не стоит забывать в главном модуле в uses
> указывать имя используемого модуля.
Естественно, иначе бы и компилятор не пропустил.
> Программа с десятком статичных форм может запросто отказаться
> запускаться под Windows 98.
Именно эту цель я и преследую - обеспечить нормальную работу под 98-ой, а НТишные осы имеют нормальные менеджеры графических ресурсов.
> TForm.Create pytaetsya najti ressursy formy. Esli ih net,
> nuzhno ispol"zovat" CreateNew (kazhetsya).
А почему это он не находит ресурсы? Главная-то форрма создается как обычно автоматом. Почему я не могу так же создать новую форму? Какжется просто у меня тупняк какой-то, где-то что-то упустил, но не могу найти...
Dr_Mike (2002-11-01 10:20:00) [23]Хм...действительно, Alex4444444444 правильно акцентировал внимание :)))
Есть ли утебя вообще .DFM файл для FormTunes???
Alex4444444444 (2002-11-01 10:07:00) [24]TForm.Create pytaetsya najti ressursy formy. Esli ih net, nuzhno ispol"zovat" CreateNew (kazhetsya).
evgeg (2002-11-01 08:18:00) [25]> Все разговоры о размерах занимаемой памяти и ресурсах - это либо разговоры о программах на чистом API, либо о "дурацком" использовании ресурсов.
Ничего подобного. Программа с десятком статичных форм может запросто отказаться запускаться под Windows 98.
Aleks1 (2002-11-01 02:49:00) [26]> Как же все-таки ПРАВИЛЬНО создавать изобилующие контролами >формы, которые редко вызываются при работе?
Правильно - это так, чтоб выбранный способ давал наименьшее количество ошибок для конкретного автора. Все разговоры о размерах занимаемой памяти и ресурсах - это либо разговоры о программах на чистом API, либо о "дурацком" использовании ресурсов. ИМХО, однако.
Dr_Mike (2002-11-01 02:29:00) [27]Описания класса и обявление переменной класса должны быть в интерфейсном разделе подчиненного модуля.
Во-вторых, просто не стоит забывать в главном модуле в uses указывать имя используемого модуля.