Илья Ермаков писал(а):
На ум приходит только WinApi по след. рецепту: когда условия нарушены, то устанавливаем в стиле окна отсутствие кнопки закрытия. Когда не нарушены, то возвращаем.
Или убираем крестик вообще, а закрытие окна разрешаем только по кнопке "Закрыть".
Я подумал над этим и обнаружил, что окно в Ящике можно закрыть шестью разными способами.
1. Нажатием на кнопку "Закрыть".
2. Нажатием на "крестик".
3. Двойным кликом по верхней левой кнопке окна (не помню, как она называется).
4. Клик по верхней левой кнопке и выбрать в меню пункт "Закрыть окно".
5. Нажатием CTRL+F4.
6. Закрыв родительское окно.
Понятно, что все эти действия в конечном итоге приводят к посылке диалогу сообщения о закрытии. Контролировать закрытие я могу (на данный момент) только в первом пункте, потому что в данном случае сообщение о закрытии посылаю я сам.
А вот как быть в остальных случаях. Этот вопрос ещё интересен и в аспекте Линукс-версии Ящика.
По идее, надо бы встать на пути сообщения, причём не выходя за границы механизмов Ящика и не опускаясь до операционной среды.
Илья Ермаков писал(а):
Может, переиграть сценарий? Ну, закроет человек немодальный диалог, так интеракторы всё равно останутся в том же состоянии... Можно, наконец, через Anchor отловить закрытие и тут же переоткрыть диалог "ах ты так... А мы тебе опять тем же окном..."

Да, это железный вариант

Особенно если учесть, что в Ящике окна открываются довольно быстро, и мерцания наверняка не будет. Пожалуй, я так и сделаю.
Илья Ермаков писал(а):
Да, естественно, можно ещё просто поставить перехватчик на окно и обрабатывать WM_CLOSE_QUERY, возвращая "нельзя закрывать". Для этого нужно запомнить текущую оконную процедуру диалога, подставить свою как перехватчик. Я что-то для этой цели вводил в MtWindows, насколько помню за давностью лет Посмотрите там.
Ага, посмотрел, есть такое, но чего-то с наскоку не получилось, вызов
Код:
MtWindows.OnClose(MtWindows.Active(), "SternTbedit.CloseNotifier");
приводит к тряпу. У вас, случайно, какого-нибудь примерчика не осталось, как правильно использовать эту штуку?
