Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Модальность в многооконном приложении 
:(
    Опции темы
artsb
Дата 11.6.2010, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Всем привет!

Есть многооконное приложение. Нужно реализовать что-то типа MDI. Вот только есть некоторые условия, из-за которых обычное MDI-приложение не устраивает:
1. Нужно реализовать модальность по только по отношению к дочерним окнам. Т.е. основное окно должно быть всегда доступно, чтобы его можно было перемещать, сворачивать, изменять размер и закрыть. Это необходимо для удобства.
2. В связи с тем, что некоторые окна приложения имеют фиксированные размеры, возникает следующая проблема: если какое-нибудь окно развёрнуто внутри главного окна, то при открытии окна с фиксированными размерами, развёрнутое окно уменьшается, что не есть хорошо.

Проблемы решил пока так:
1. Использую обычное MDI-приложение. Вместо отображения модального окна, пробегаюсь по всем чилдам и ставлю Enabled=false. Потом отображаю "модальное" окно. После закрытия этого окна, делаю Enabled=true всем чилдам.
2. Перехватываю момент разворота окна и просто ставлю его в позицию (0, 0), а ширину и высоту делаю равными ширине и высоте клиентской области главного окна.

Естественно, всё это дело выглядит ужасно (особенно разворот), но другого пока ничего придумать не удалось.

Вот, хотел узнать, что посоветуют спецы. Может кто-то сталкивался с подобной задачей...

В принципе, не обязательно делать MDI-приложение. Это может быть что угодно. Лишь бы было главное окно, которое содержало в себе дочерние "окна". Вот вчера, например, появилась идея:
Использовать PageControl. В него можно встраивать окна в качестве вкладок. Это решает такую проблему, как развёртывание (получается окно всегда будет развёрнуто на всю доступную область главного окна). Остаётся одна - модальность. В принципе, некоторые окна, наподобие "О программе" и "Настройки" можно отображать как обычные модальные окна. Тогда остаются "модальные" окна связанные с конкретной вкладкой (окном). Тут была идея приблизительно такая: перед открытием "модального" окна, делаем скриншот, затемняем его немного, скрываем само окно (содержимое вкладки), кладём Image и вставляем в него затемнённый скриншот, а поверх Image на эту же вкладку кидаем заранее заготовленный фрейм (оформленный в виде окна). Вроде всё супер. Но возникает другая проблема: что делать, если изменится размер главного окна? Получается, что старый криншот уже не подходит в качестве подложки. А как сделать новый?..

В общем, надеюсь, что суть вы поняли smile


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
NightElf
Дата 11.6.2010, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 12.2.2006
Где: Украина, Луганска я обл.

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



Да есть такая проблема, но такова политика MDI, все окна не могут быть максимизированы. Активным может быть только чтото одно.
Модальная форма накрывает всё полностью (простой пример приложения Office). 
Попробуй на формы те что должны быть максимизированы поставить в нужный момент Align = alClient а затем сразу Align = alTop.


Это сообщение отредактировал(а) NightElf - 11.6.2010, 09:46
PM MAIL ICQ   Вверх
artsb
Дата 11.6.2010, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Спасибо за ответ.

Цитата(NightElf @  11.6.2010,  09:21 Найти цитируемый пост)
все окна не могут быть максимизированы. Активным может быть только чтото одно.

Как раз таки, все одновременно могут быть, тогда можно между ними переключаться по Ctrl+Tab. А вот так, чтобы несколько развёрнутых и хотя бы одно с фиксированными размерами быть не может.

Цитата(NightElf @  11.6.2010,  09:21 Найти цитируемый пост)
Модальная форма накрывает всё полностью (простой пример приложения Office). 

Эт понятно. Но мне нужно допиться похожего эффекта, только чтобы главное окно осталось активным. Т.е. модальность я привёл как пример того, что мне нужно и указал недостаток, который мне мешает.

Цитата(NightElf @  11.6.2010,  09:21 Найти цитируемый пост)
такова политика

Опять таки, я просто привёл пример того что мне нужно и указал недостатки.

Я же писал, что необязательно решать задачу стандартными средствами.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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