![]() |
|
|
![]()
|
|
| ALXP |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 6.2.2008 Где: Левое полушарие Л уны Репутация: нет Всего: нет |
Приветствую! Вот столкнулся с проблемкой.
У мну MDI приложение. Т.е. стало мди. Я создал просто приложение с основной формой не MDI. И еще много форм тоже отдельных, сразными кнопочками и т.п. Потом просто свойство основного окна FormStyle поставил в fsMDIForm А те формы остальные этоже свойство FormStyle поставил в fsMDIChild Окна создаю кодом
Типа проверяю если есть уже такое созданное окно то просто устанавливаю на него фокус По нажатии на закрытия окна пишу
НО ShowModal() в MDI делать нельзя, только Show() Я не знаю как сделать это. Или просто Это сообщение отредактировал(а) ALXP - 7.6.2008, 11:28 |
||||
|
|||||
| orthrus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 400 Регистрация: 30.10.2007 Где: г. Усть-Илимск(Ир кутская обл.) Репутация: 4 Всего: 16 |
MDIChild нельзя сделать модальным, так что вызывай это окно не как MDIChild но модально.
-------------------- У того, кто ничего не делает, всегда много помощников.© Л.Н. Толстой ![]() |
|||
|
||||
| Vyacheslav |
|
||||||||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
Cымитируй работу модального окна.
При вызове Child окна из друго окна передаешь ему качестве owner окно , которое его вызывает типа
Задаешь обработчик
Не забудь задать обработчики OnClose для всех child-окон, иначе не сможешь их закрыть
Добавлено @ 19:47 Кстати вот этого
в коде делать не рекомендуется. Лучше изменить в инспекторое. В хелпе есть на этот счет рекомендации( С++Builder 6 )
Чтобы Child-окна при этом не появлялись при запуске нужно убрать их из списка автосоздания и создвать в коде, как я уже выше показывал Если указатель на окно не нужен, то просто
Если же он все так для чего то нужен, то
где childForm - переменная типа TChildForm -------------------- С уважением, Вячеслав Ермолаев |
||||||||||||||
|
|||||||||||||||
| ALXP |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 6.2.2008 Где: Левое полушарие Л уны Репутация: нет Всего: нет |
orthrus это я понимаю и знаю, но прога такова что все окна должны быть в оном контейнере, т.е. внутри одного окна. Такова цель. Вот только стандартные диалоги как MessageBox можно по заданию вызывать как модальные для всей проги
Vyacheslav спасибо, но есть большиено. Я попробовал как Вы написали. Это работает, если мы будем нажимать на окно родитель. НО в окне родителе есть таблица и другие элементы, если мы на них нажимаем, то активной становится форма родитель и такое же происходит когда нажимаем на кнопки свернуть развернуть. Так что этот способ работает, но не так как надо. ..------------------------------------- А насчет того чтобы сделать неактивными остальные окна У меня вот какая задумка появилась. Я понимаю что будет полный бред для некоторых, и не надо орать на меня и бить ногами, просто как вариант. И хочу отзывов. У мну окон определенное количество 8 штук, они не генерятся случайно. поэтому я в оснойной WinMain могу сделать глобальные переменные для каждой формы типа bool, которые будут показывать создана форма щас или нет. И сделать функцию для тех окон которые должны вызываться типа модально, которая будет просто те окна которые созданы делать неактивными, а при закрытии такой модальной формы делать активными. ..-------------------------------------------- Думаю так будет чуток геморойней, но сработает. Но это не решит проблему паузы в окне вызывателя(родителя) Как можно поставить на паузу MDIChaild ? Это сообщение отредактировал(а) ALXP - 10.6.2008, 09:39 |
|||
|
||||
| Vyacheslav |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 47 Всего: 59 |
Ну можно пойти от обратного сделать следущее.
Поскольку модальное окно может быть одно, создайте переменную , которое будет указывать на модальное окно и которое будет доступно для всех окон( можно в главвной форме) Для каждого окна задайте обработчик
Чтобы передать информацию в момент закрытия окна можно воспользоваться куче вариантов Например просто в событии OnClose модально окна передать все, что нужно Я бы сделал базовый класс для Child - окон, в котором бы предусмотрел виртуальную функцию OnModalClose( TBaseChildForm * modalForm)
По логике быдо бы лучше предусмотреть событие even, которое будет вызываться у родительского окна на момент закрытия модального окна [/code] -------------------- С уважением, Вячеслав Ермолаев |
||||
|
|||||
| ALXP |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 6.2.2008 Где: Левое полушарие Л уны Репутация: нет Всего: нет |
а по закрытию делаю эти формы(окно MDIChild) наоборот Enabled = true. Это работает. Пока у меня активна (модальная)форма все остальные неактивны. С этой проблемой разобрался. А со второй проблемой справился (вроде справился) так (пока работает). В форме родителе у мну есть кнопочка добавить новую запись ,а эта запись бралась из второй (модальной) формы. А сделал так. Создал в окне с кнопочкой переменную флаг(bool) и если нажата кнопочка добавить новую запись, то делаю флаг в true. А в метод OnActivate поместил проверку этого флага. и если да , то записываю запись которую возвращает в глобальную переменную(которая определена в главном окне) (модальная)форма по закрытии. Получается что по закрытию (модальной)формы она возвращает и запись мне нужную и делает активными все окна которые были неактивны. Срабатывает тот метод и происходит запись в базу УРА. Правдо геморно это все флагами делать. Если кто знает способ проще то поделитесь Это сообщение отредактировал(а) ALXP - 16.6.2008, 16:21 |
|||
|
||||
| ALXP |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 6.2.2008 Где: Левое полушарие Л уны Репутация: нет Всего: нет |
Рано радовался. То что блокирую окна по открытию какой либо формы это ГУД. то что надо.
Вот вопрос опять. МОЖНО ЛИ ПОСТАВИТЬ ВЫПОЛНЕНИЕ ЧАЙЛДА В ПАУЗУ? как поток , остановил запустил? сделать паузу прям посреди выполнения какой либо функции(метода)? |
|||
|
||||
| ALXP |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 6.2.2008 Где: Левое полушарие Л уны Репутация: нет Всего: нет |
теперь видно какое окно модальное работает и могу сделать проверку, если оно есть, то там где надо, ничего не делается, а просто выходит из функции(метода). Уря. Теперь у мну с маленьким гемороем есть MDI приложение в котором есть ModalChild Это сообщение отредактировал(а) ALXP - 16.6.2008, 16:13 |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |