Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];

Вниз

закрытие MDI Форм   Найти похожие ветки 

 
_dimka ©   (2005-11-25 12:32) [0]

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

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


 
msguns ©   (2005-11-25 12:45) [1]

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


 
_dimka ©   (2005-11-25 13:05) [2]


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

ну почему же?


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

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

Все.


 
msguns ©   (2005-11-25 13:52) [4]

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

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


 
_dimka ©   (2005-11-25 13:54) [5]


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

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


 
msguns ©   (2005-11-25 14:02) [6]

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

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



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.015 c
14-1132910088
Александр Иванов
2005-11-25 12:14
2005.12.18
Сверхурочная работа


2-1133264260
Sysanin
2005-11-29 14:37
2005.12.18
реестр


14-1133032576
lookin
2005-11-26 22:16
2005.12.18
Ошибочный файл в EMule


14-1132584437
ychenick
2005-11-21 17:47
2005.12.18
Огромный WinAPI справочник?


6-1126245093
Tor
2005-09-09 09:51
2005.12.18
Получение данных через TCP соединение





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский