Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.07.2015, 09:54   #1
m9yt
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 108
По умолчанию Механизм закрытия дочерних форм приложения

Добрый день. Пытаюсь сообразить, как грамотно реализовать механизм закрытия дочерних форм приложения.
Есть 2 ситуации:

1) Дочерняя форма закрывается вручную (пользователь нажал крестик)

На каждой форме обрабатывается событие OnCloseQuery, т.е. всегда спрашивается, сохранить ли данные перед уничтожением окна(Да/Нет/Отмена).

2) Дочерние формы закрываются программно, при закрытии главной формы

В данном случае опрашивается каждая дочерняя форма. Если они все дали согласие, то выполняем закрытие (aForm.Close). Если хоть на одной форме выбрали "Отмена", то не закрываем вообще ничего. Проблема в том, что в этот самый момент, когда вызываем aForm.Close для каждой формы, повторно вызывается подтверждение закрытия, что нелогично.

Таким образом мне необходимо понять, как предотвратить повторный запрос подтверждения закрытия дочерних форм, если я это уже узнал перед тем, как приступить к их непосредственному закрытию.
m9yt вне форума Ответить с цитированием
Старый 29.07.2015, 10:35   #2
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 514
По умолчанию

либо создать флаг на каждой форме, который отмечать когда ответ получен и вопрос не надо задаdать перед закрытием, и соответственно проверять этот флаг на закрытие

либо вызывать не aForm.Close, а aForm.Free (тут не уверен, только предположение)

первый вариант считаю более правильным
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Старый 29.07.2015, 10:45   #3
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

у класса дочерней формы сделай свойство, показывающее, что приличия соблЮдены и окно можно закрывать без запросу.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 29.07.2015, 10:54   #4
m9yt
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 108
По умолчанию

Спасибо за ответы!
m9yt вне форума Ответить с цитированием
Старый 29.07.2015, 11:45   #5
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
По умолчанию

CloseQuery(); чем именно не угодил ?
Цитата:
Если хоть на одной форме выбрали "Отмена", то не закрываем вообще ничего.
Вообще это делается "Сохранить изменения в документах <список окон>?".

Последний раз редактировалось ResourceSpace; 29.07.2015 в 11:47.
ResourceSpace вне форума Ответить с цитированием
Старый 29.07.2015, 12:32   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Бродкастом WM_CLOSE отправьте.
Человек_Борща вне форума Ответить с цитированием
Старый 29.07.2015, 13:18   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Бродкастом WM_CLOSE отправьте.
на всю систему чтоль?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Затруднение при загрузке дочерних форм из dll BasVic C++ Builder 0 12.06.2012 13:13
Создание вкладок дочерних форм arthur1 C# (си шарп) 1 28.04.2012 08:53
Закрытие дочерних MDI форм Armorer Общие вопросы Delphi 10 09.08.2011 18:44
Закрытие всех дочерних форм belarusfight C# (си шарп) 3 26.02.2011 15:06
Много дочерних форм... L.A.M.E.R. Общие вопросы Delphi 4 03.08.2010 08:13