Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: СУБД и Delphi/Lazarus

  Все выпуски  

RusFAQ.ru: СУБД и Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / СУБД и Delphi

Выпуск № 361
от 11.07.2007, 09:05

Администратор:Gh0stik
В рассылке:Подписчиков: 328, Экспертов: 40
В номере:Вопросов: 1, Ответов: 6


Вопрос № 94035: Доброго дня всем!У меня вопрос или вернее призыв к обсуждению При запуске программы возникает меню скажем из пяти пунктов в виде пяти кнопок.При нажатии на какую либо кнопку меню исчезает и возникает окно совсем другого вида со своим наб...

Вопрос № 94.035
Доброго дня всем!У меня вопрос или вернее призыв к обсуждению
При запуске программы возникает меню скажем из пяти пунктов
в виде пяти кнопок.При нажатии на какую либо кнопку меню
исчезает и возникает окно совсем другого вида со своим набором
компонентов.И т.д Т.е форма одна но ее вид и компоненты на ней каждый раз другие.
В паскале было все просто - делаем clrscr и рисуем что хотим.
Как это сделать в DELPHI ?
Порывшись в своих книжках я нашел три способа решения проблемы
1 Создаем одну форму и бросаем на нее ВСЕ компоненты а потом
из программы через свойство ENABLED включаем или отключаем
компоненты по мере надобности.Но как такую вещь проектировать
ведь они будут сидеть друг на дружке а если их очень много то будет полная неразбериха
2Создать для каждого пункта меню свою форму .Через процедуры HIDE
SHOW включаем одну форму и выключаем другую.Но при этом вырастает
объем программы ведь даже пустая форма довольно увесиста.
3 Ничего не коструировать а все нужные копоненты создавать
и удалять програмно.Но тут все надо делать через код и
пропадают все удобства визуального програмирования.
А как в таком случае поступают профессионалы ? Может быть
есть более простое решение ? Не хотелось бы изобретать
велосипед.
Отправлен: 05.07.2007, 13:37
Вопрос задал: Байрашевский Тахир (статус: Посетитель)
Всего ответов: 6
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Лукьяненко Алексей Валериевич
Здравствуйте, Байрашевский Тахир!

2 Вариант наименее трудоемок и наиболее удобен при разработке, а насчет "увесистости" Вы не правы. Когда в приложение добавляется _первая_ форма, вместе с кодом собственно ее модуля и ресурса (.dfm) добавляется соответствующий код VCL. При добавлении же остальных форм код библиотеки не добавляется (он уже есть), добавляется только код модуля формы и .dfm. Разница полезного кода по сравнению с первым вариантом будет килобайта 3-4 (из-за выравнивания модуля по границе страницы)

В принципе, можно использовать и первый вариант, но компоненты группируем панелями, которые когда надо показываем/скрываем. При разработке нужную панель делаем Bring to front и работаем с ее компонентами.
Ответ отправил: Лукьяненко Алексей Валериевич (статус: 8-ой класс)
Ответ отправлен: 05.07.2007, 13:49
Оценка за ответ: 5

Отвечает: BlackRaider
Здравствуйте, Байрашевский Тахир!
Можете сделать все через формы но формы сделать в DLL
B по мере необходимости вызывать те DLL которые нужны и выгружать те что уже отработали... По крайней мере я б так сделал.
Это конечно не уменьшит общего размера файла но в процессе работы программы снизит размер занимаемой памяти.
Ответ отправил: BlackRaider (статус: 1-ый класс)
Ответ отправлен: 05.07.2007, 13:55
Оценка за ответ: 4

Отвечает: Sandy
Здравствуйте, Байрашевский Тахир!
Как вариант, каждый вид формы разместить на отдельной TPanel, которых будет столько, сколько видов у формы. Visible в каждый момент времени только у одной. В режиме разработки достаточно удобно получать доступ к нужной панели выбрав нужную панель в инспекторе объектов и через меню Правка пункт BringToFront,
Ответ отправил: Sandy (статус: 7-ой класс)
Ответ отправлен: 05.07.2007, 14:22
Оценка за ответ: 5

Отвечает: W@NDeReR
Здравствуйте, Байрашевский Тахир!
Вместо Enabled можно использовать свойство Visible
---------
Опыт — дитя мысли, а мысль — дитя действия. Нельзя учиться по книгам.
Ответ отправил: W@NDeReR (статус: 5-ый класс)
Ответ отправлен: 05.07.2007, 16:35
Оценка за ответ: 3

Отвечает: Delph
Здравствуйте, Байрашевский Тахир!

А как Вы относитесь к такому компоненту, как PageControl? В нём можно сделать необходимое в Вашем приложении число листов, из которых в один момент времени полностью виден только один, а остальные представлены лишь в виде вкладок с названиями. Содержимое всех листов, кроме активного, скрыто как при проектировании программы, так и при выполнении, активируется же нужный лист одним кликом мышки. Для переключения листов Вам даже не придётся писать никакого кода, да и смотрится это, на мой взгляд, лучше, чем переключение по меню.
В палитре компонентов PageControl находится на вкладке Win32. Поместите его на форму, щелчком правой кнопкой по нему Вы вызовите меню, в котором можно добавить лист (New sheet). Добавьте столько листов, сколько считаете нужным.

На мой взгляд это наиболее удобное решение в Вашей ситуации, поскольку оно сочетает в себе простоту реализации с привычным уже изяществом многих приложений. Если нужны подробности, пишите в личку, постараюсь ответить на все Ваши вопросы.
Ответ отправил: Delph (статус: 4-ый класс)
Ответ отправлен: 05.07.2007, 16:46
Оценка за ответ: 3

Отвечает: Виктор Пырлик
Здравствуйте, Байрашевский Тахир!
Все способы перечисленные вами хороши по-своему.
Часто удобно сделать так: добавить PageControl, установить Align = alClient и сделать у него столько вкладок, сколько необходимо, на момент запуска приложения, прятать все вкладки - PageControl1.Pages[i].Visible := false;
PageControl1.ActivePageIndex := 0; //или, та, которая вам нужна
где i – количество вкладок, можно получить из PageControl1.PageCount.
Таким образом, вы не будите загромождать форму, во время исполнения вкладки не будут видны (обычная форма будет) и будет видно только содержимое активной вкладки а переключаться можно так:
PageControl1.ActivePageIndex := <нужный номер>;
Но, проблема шире, и лежит не в реализации а в проектировании приложения, основным требованием которого является, в том числе – минимизация функциональных элементов на видимой форме и как следствие – разделение отдельных функционалов по разным модулям, что значительно снижает нагрузку на программиста при разработке (все разложено по полочкам). Сегодня действительно, добавление формы – не критично по отношению к ресурсам, совокупная требуемая память все равно перешагнет мегабайт. Но, такой подход, значительно оптимизирует процесс разработки.

---------
Если ничего не помогло - надо читать инструкцию
Ответ отправил: Виктор Пырлик (статус: 5-ый класс)
Ответ отправлен: 05.07.2007, 23:07
Оценка за ответ: 3


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.53 beta от 09.07.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное