![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| Злоумышленник |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 3.9.2006 Репутация: нет Всего: -3 |
В программе использую много MDI-форм внешне схожих, поэтому наследую их от одной формы. При закрытии в родителе ставлю Action := caFree; Но мне нужно также на переменную-указатель "имя формы" при закрытии ставить nil. Сейчас я это делаю в наследниках при закрытии (одно и то же практически при разных именах форм). Как это можно делать в родительской форме один раз? Self := nil не проходит.
|
|||
|
||||
| yus |
|
||||||||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 1.2.2007 Где: Tomsk Репутация: нет Всего: нет |
Если я правильно понял вопрос, то можно при закрытии дочернего окна посылать главной форме сообщение, WM_USER что окно закрывается с передачей указателя дочерней формы и уже из родительской формы освобождать дочернее. Примерно так: Родительское:
Дочернее:
Это сообщение отредактировал(а) yus - 28.3.2007, 06:04 |
||||||||
|
|||||||||
| ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 9 Всего: 95 |
Вариант yus достаточно неплох (при условии, что и он, и я правильно поняли вопрос), но может правильней переопределить деструктор MDI-формы?
-------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
| Злоумышленник |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 3.9.2006 Репутация: нет Всего: -3 |
Вы меня не так поняли. Не главная форма, а родительская, она даже не создаётся, просто инкапсулирует общие для всех форм действия.
А переопределение деструкторОВ MDI-форМ ничего нового, кроме лишнего кода, не даст. Вот определение формы, наследуемой от TfmLabxForm:
Я сейчас делаю примерно так в КАЖДОЙ наследуемой форме:
Хочется fmLabxForm1 := nil; и все остальные (fmLabxForm2, 3, ... ,35) один раз при закрытии в nil ставить в РОДИТЕЛЕ Это сообщение отредактировал(а) Злоумышленник - 28.3.2007, 10:33 |
||||
|
|||||
| Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 15 Всего: 76 |
Злоумышленник, Что ты хочешь сделать, так нельзя. Я как понимаю это тебе нужно для анализа существования формы(аля создавать или нет)? Нужно писать отдельный менеджер который и будет создавать формы, хранить на них указатели, и анализировать их уничножение.
-------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
| ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 9 Всего: 95 |
Да позволено мне будет спросить: а откуда родитель может знать о своих потомках? По-моему, в принципах ООП такой связи не предусмотрено... Это потомок знает своего предка в лицо, а наоборот - это нонсенс какой-то...
-------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
| Злоумышленник |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 3.9.2006 Репутация: нет Всего: -3 |
решено другим способом
http://expert.delphi.int.ru/question_440 "Ответ эксперта: Задача осложняется тем, что на одну форму может быть не одна переменная-указатель. Что и есть в вашем случае. Self и FormXXX. И форма не сможет обнулить их всех. это даже в теории сложно звучит. Что делать. Есть два варианта. Один, в формкрейте передавать ссылку на переменную, которую нужно обнулить по выходу. Второе решение заключается в том, (я его часто применяю) что когда форма пропадает, то она пропадает с глобального маасива Screen.Forms. Тоесть, когда создаёте новую форму, вам нужно проверить, а нет ли её ещё. И с помощю банального цикла for i:=0 to Screen.FormCount-1 do if TForm(Screen.Forms).XXXXX = XXXXX then {наша форма найдена!} мы по какомуто критерию ищем нашу форму. Нашли - указатель на неё валиден. нет - звиняйте. Можно обнулять и создавать новую форму. Пожалуйста, не забывайте оценивать ответы экспертов! Нам важно Ваше непредвзятое мнение! Ответ отправил(а): Вадим К Дата и время отправки ответа: 28.03.2007, 11:31" Правда, проверить смогу только через 2 недели на работе - сейчас отпуск Это сообщение отредактировал(а) Злоумышленник - 28.3.2007, 11:54 |
|||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |