Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
 Аватар для Jamplane
4 / 4 / 1
Регистрация: 13.09.2013
Сообщений: 154

Запретить закрытие модального окна

23.10.2014, 17:19. Показов 4650. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Суть вопроса такова:
Вызывается форма (методом ShowModal). На форме есть 3 поля для ввода и кнопка, допустим, "But1" со свойством ModalResult равным mrOk. Мне необходимо сделать так, чтобы в определённых ситуациях (когда в поля для ввода занесены некорректные данные) при нажатии на But1 не происходило закрытие окна с возвращение mrOk, а выдавалось сообщение об ошибке (в MessageBox, например).

Есть ли что-нибудь такое, вроде AllowClose? И как вызвать в обрабобтчике кнопки?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.10.2014, 17:19
Ответы с готовыми решениями:

Вызов Модального окна.
Добрый день, есть программа в которой много форм. Из них в некоторых(формах,окнах) устанавливаются параметры, настройки программы. Когда...

Запретить закрытие окон на втором мониторе
У меня 2 монитора, и часто бывает такое - на 1 мониторе- фильм, а на втором что то делаю. Иногда курсор перевожу на монитор с фильмом -...

как запретить закрытие процесса на Delphi?
Вот такой вопросик вот процесс как avp.exe это Касперский!ну в общем этот процесс завершить нельзя когда завершаешь пишет что в доступе...

12
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,608
23.10.2014, 17:26
OnCloseQuery
1
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
23.10.2014, 17:31
Да и OnClose никто не отменял.
1
 Аватар для Jamplane
4 / 4 / 1
Регистрация: 13.09.2013
Сообщений: 154
23.10.2014, 17:47  [ТС]
FIL, а как с OnClose?
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
23.10.2014, 17:49
У него есть папаметр: Action.
Например, пишем:
Delphi
1
  Action := caNone;
и окно не будет реагировать на закрытие.
2
20 / 20 / 4
Регистрация: 31.10.2010
Сообщений: 1,240
Записей в блоге: 2
12.02.2015, 09:41
FIL, а если необходимо, чтобы ничего не могло закрыть окно, кроме определенной кнопки?
Т.е. я напишу в метод OnClose Action := caNone;
А как при этом закрыть окно на кнопку?
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
12.02.2015, 10:23
Цитата Сообщение от Костяныч Посмотреть сообщение
А как при этом закрыть окно на кнопку?
Delphi
1
  Release;
Добавлено через 1 минуту
Если форма главная, то:
Delphi
1
  Application.Terminate;
1
20 / 20 / 4
Регистрация: 31.10.2010
Сообщений: 1,240
Записей в блоге: 2
12.02.2015, 10:25
FIL, Release, закрывает окно, но при этом главное окно застывает и не реагирует. Мне необходимо запретить какое-либо закрытие форму извне. Только на кнопку 'Cancel' или крестик.
0
17 / 17 / 5
Регистрация: 04.01.2014
Сообщений: 43
12.02.2015, 10:33
Костяныч, определись, как окно закрывать надо - по кнопке, по системной кнопке(на крест справа-сверху, если есть), по системному меню (слева-сверху по иконке окна, опять же, если есть), по хоткею (Alt+W/Esc/Alt+F4/etc.) и укажи в обработчике OnClose, где caNone, а где caFree в зависимости от Sender.

А вообще в свойствах формы, особенно модальной, можно настроить её вид и поведение, поигравшись в свойствах BorderStyle, BorderIcons и FormStyle.
0
20 / 20 / 4
Регистрация: 31.10.2010
Сообщений: 1,240
Записей в блоге: 2
12.02.2015, 11:03
MadRabbyt, просто у меня есть исходник. При выполнении алгоритма форма закрывается. Дебагером не могу отследить закрытие, много строк лопатить. Где вызов закрытия происходит я не знаю. По этому хочу запретить все вызовы закрытия, кроме кнопки и системной кнопки.

Добавлено через 25 минут
Все нашел.
0
17 / 17 / 5
Регистрация: 04.01.2014
Сообщений: 43
12.02.2015, 12:11
Цитата Сообщение от Костяныч Посмотреть сообщение
Все нашел.
Ну, как говорится "Результаты в студию."
0
20 / 20 / 4
Регистрация: 31.10.2010
Сообщений: 1,240
Записей в блоге: 2
12.02.2015, 12:13
MadRabbyt, прошелся дебагером, наткнулся на такую строчку
Delphi
1
ModalResult := mrOk;
Поставил условие на нее. И все работает как планировалось.
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
12.02.2015, 12:56
Цитата Сообщение от Костяныч Посмотреть сообщение
Release, закрывает окно, но при этом главное окно застывает и не реагирует.
Если окно модальное, то перед закрытием надо ModalResult задать:
Delphi
1
2
3
4
5
procedure TForm2.Button1Click(Sender: TObject);
begin
  ModalResult := mrOk;
  Release;
end;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.02.2015, 12:56
Помогаю со студенческими работами здесь

Как нажать кнопку на основной форме из модального окна?
Есть модальное окно перед закрытием которого нужно программно нажать кнопку на основном окне. Пробовал так: ...

Запретить закрытие формы OnClose:=canone в отдельном модуле
procedure TZalupaFrm.FormClose(Sender: TObject; var Action: TCloseAction); begin action:=canone; end; Нужно эту штуку в...

Правильное закрытие окна по ESC
Есть прекрасно работающий код, который я нашел где-то в дебрях инета. // Это надо прописать в обьявлениях. procedure...

Закрытие окна при выполнении рекурсовной функции
есть рекурсивная функция она выполняется долго как можно закрыть программу нажав на X (закрыть окно) (при нажатии она все продолжает...

Закрытие модального окна!
есть некая программа. Я делаю к ней авторизацию модальной формой. procedure TForm1.FormShow(Sender: TObject); begin ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru