| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Модальная MDIChild |
| Автор: StayAtHome 4.4.2005, 01:08 |
| Возникла потребность отобразить модально MDIChild-форму. C удивлением, обнаружил, что ShowModal не работает, т к Child-форма видима сразу после создания Кроме того ей вообще невозможно установить Visible:=False Мож кто прояснит, зачем существует такое ограничение, и как его обойти? |
| Автор: FRAGNATIC 4.4.2005, 14:57 | ||
|
| Автор: StayAtHome 5.4.2005, 01:06 |
| Я так и сделал, но после создания формы и ДО ее появления на экране, мне нужно выполнить кое-какой код, а MDIChild сразу отображается после Create (при установке FormStyle=fsMDIChild). И ShowModal все равно в результате не пашет. |
| Автор: <Spawn> 5.4.2005, 04:49 | ||||
Можешь явным образом изменить видимость у окна:
и потом восстановить, когда нужно будет
|
| Автор: Girder 5.4.2005, 11:42 | ||||||
| 1. Убераеш свою MDIChild форму из автосоздания: (MainMenu)Project->Options->Forms. Там её перебрасываеш в: Available forms 2. Переключаешся на свою MDIChild форму и дописываеш в описание класса(пусть например твой класс формы для MDIChild называется TForm2):
3. Реализуеш енту процедуру:
4.Ну и например создание ентой формы:
Удачи. |
| Автор: StayAtHome 6.4.2005, 01:20 | ||
| Исчерпывающий ответ. Спасибо! С Show все работает, но ShowModal использовать так и не удалось. Там в первой же строке реализации черным по белому:
Увы, вопрос остается открытым. |
| Автор: Петрович 6.4.2005, 07:44 |
| Не совсем понятно зачем бы делать ShowModal для MDI формы. Дело в том, что у MDI форм очень сложные взаимоотношения с другими окнами. Если уж есть какая-то необходимость, то перед созданием этого окна сделай его не MDI. Ааа. Кажется понял. Ты хочешь уже созданное окно отображать то модально, то нет. Тогда тебе не повезло. Правда мне все равно не понятно зачем такое делать. По своей природе, дочернии MDI-окна равноправны. А ты хочешь сделать как всегда: все равны, но некоторые ровнее. |
| Автор: Girder 6.4.2005, 11:17 | ||||||
Создаем "модульную" MDIChild форму:
И гл́авное! Не забываем востановить все при закрытии "модальной" MDIChild формы
|
| Автор: StayAtHome 6.4.2005, 20:48 | ||
| Петрович Ты угадал, я создаю формы-экземпляры одного класса, но некоторые -- модальные, а некоторые нет. Такой изврат нужен для отображения таблиц БД связанных по Foreign Key. Т. е. при добавлении записи в таблицу в которой есть FK на другую, пользователь значение поля по которому создан FK сможет выбирать из формы-справочника, которая, естественно, должна отображаться в модальном режиме. Если же мне нужно просто посмотреть/поправить справочники -- та же форма (точнее другой ее экземпляр) должна открываться в обычном режиме (немодальном). Возможно это все дикий изврат, но мне показалось так удобнее и мне и пользователю. Girder Это уже интересней! (аж стыдно, что сам не догадался) Попробую. Пока сделал на OnDeactivate
|
| Автор: Medved 10.4.2005, 23:19 | ||
Согласен на сто процетов. Я так и не понимаю зачем это делать. В этом решении больше геммороя, чер практической пользы. |
| Автор: icc 11.4.2005, 08:58 |
| Не знаю насколько это правильно, но я использую такую конструкцию. Форма создается при вызове. with TEmterpriseCard.Create(Application) do begin // код до создания end; |