Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

закрытие MDI Форм [D6]


_dimka ©   (2005-11-25 12:32:00) 

есть mdi приложение, нужно сделать вот что:
нажимаю на кнопку на форме1(mdichild) появляеться форма2(mdichild), соответственноь таких форм может быть много, но как сделать так что-бы при закрытии формы1 закрывались формы2 которые я вызвал с этой формы?
в голову пришло 2 варианта:
1) использовать свойство Tag, при создании формы1 устанавливать уникальное значение в Tag при создании формы2 присваиваем ей свойству Tag такое же значение
2) создавать форму2 так TForm3.Create(Form1.ActiveMDIChild);

как лучше поступить?
заранее спасибо


msguns   (2005-11-25 14:02:00) [1]

>_dimka ©   (25.11.05 13:54) [5]
>Да нет :), нужно иммено MDI....

Тогда объясни, ЧТО ИМЕННО ты понимаешь под МДИ.
Когда формы создаются "этажерочным" способом и при этом все доступны, то это и есть "кто на ком стоял ?". По крайней мере именно такое чувство возникнет у пользователя, когда он откроет штук 5-6 форм.


_dimka   (2005-11-25 13:54:00) [2]


> Потому что иначе будет как в "Собачьем сердце":
> "Простите, я не понял, кто на ком стоял ?"

Да нет :), нужно иммено MDI....


msguns   (2005-11-25 13:52:00) [3]

>_dimka ©   (25.11.05 13:05) [2]
>ну почему же?

Потому что иначе будет как в "Собачьем сердце":
"Простите, я не понял, кто на ком стоял ?"


Суслик   (2005-11-25 13:08:00) [4]

допустим форма А создает формЫ Б.
1. В классе Б в обработчике OnClose пишешь Action := caFree;
2. При создании формы Б из формы А вызываешь у нее FreeNotification передавая ей self (т.е. форму А)
3. В форме А запоминаешь все созданные формы Б (например в TLIst)
4. В форме А переопределяешь Notification
5. Если форма Б закрывается то vcl известит A, о том, что форма Б закрывается (удаляется).
6. В А.Notification удаляешь из TList (см. п 3) закрытую пользователем форму.
7. При закрытии формы А пробегаешь по списку форм и вызываешь у них Close.

Все.


_dimka   (2005-11-25 13:05:00) [5]


> Формы же, вызываемые непосредственно из "дочек", должны
> быть не MDI и обычно вызываются  модально.

ну почему же?


msguns   (2005-11-25 12:45:00) [6]

Какое-то непонятное у тебя MDI ;)
По идее "папа" у всех "дочек" должен быть один (MDIForm) и "дочки" равноправны между собою (MDIChild). Вызов очередной "дочки" должен выполняться "папой", а не другой "дочкой". Если же функционал требует создавать новую "дочь" из уже существующей, то существующая должна обратиться к "папе" с "просьбой сделать это "за нее".
Формы же, вызываемые непосредственно из "дочек", должны быть не MDI и обычно вызываются  модально.


Наверх

Титульная страница Поиск, карта сайта Написать письмо