Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 113, средняя оценка - 4.96
Dream
157 / 154 / 16
Регистрация: 26.07.2008
Сообщений: 549
#1

Запрет на закрытие программы. - Delphi

23.10.2008, 23:06. Просмотров 15160. Ответов 10
Метки нет (Все метки)

Подскажите, пожалуйста.

Как сделать так, чтобы при нажатие на крестик в правом верхнем углу окна программы, программа бы не закрывалась?
Совсем убирать кнопку не нужно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2008, 23:06
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Запрет на закрытие программы. (Delphi):

закрытие программы
Доброго времени суток. Проблема в следующим. Запускаю программу, работаю, потом...

Закрытие программы Delphi без видимых на то причин
Уважаемые форумчане, возникла проблема. Написал программу (см. код ниже). После...

Закрытие своей программы
Если запущенна моя программа (кот) то при ее работе запустили программу...

Закрытие своей программы
Запускаю exe файл и хочу закрыть свою программу, но как понимаю, пока тот exe...

DELPHI закрытие программы
Ничего не могу понять, написал код программы, но в конце выдает ошибку на...

Закрытие программы при запуске ДЗ
Привет всем, подскажите пожалуйста код для закрытия программы при запуске...

10
Anatol_rus
12 / 12 / 4
Регистрация: 23.10.2008
Сообщений: 33
24.10.2008, 00:20 #2
в эвенте формы в событии OnClose напиши:
Application.Run;

Вот как ет выгледит:

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Application.Run;
end;

И будет тебе счастье
0
Arriba
255 / 171 / 27
Регистрация: 17.10.2008
Сообщений: 770
24.10.2008, 03:04 #3


Вы меня конечно извиняйте, но дело получается так, если в вашем случае создать кнопку с кодом Form1.close; закрытия программы, то всё будет прекрасно!!! Но если разок 40 нажать на крестик вверху программы, прога зависает...(попробуйте понажимайте). Исправления извиняйте не придумал. Есть конечно вариант сделать вдобавок неактивным крестик сверху.
0
Dream
157 / 154 / 16
Регистрация: 26.07.2008
Сообщений: 549
24.10.2008, 07:05  [ТС] #4
Цитата Сообщение от Arriba Посмотреть сообщение
Вы меня конечно извиняйте, но дело получается так, если в вашем случае создать кнопку с кодом Form1.close; закрытия программы, то всё будет прекрасно!!! Но если разок 40 нажать на крестик вверху программы, прога зависает...(попробуйте понажимайте). Исправления извиняйте не придумал. Есть конечно вариант сделать вдобавок неактивным крестик сверху.
Согласен с Вами.

Подскажите, как сделать неактивным крестик.
0
Arustarh Dark
58 / 57 / 12
Регистрация: 08.06.2008
Сообщений: 243
24.10.2008, 07:16 #5
А что, событие OnCloseQuery уже не устраивает?
1
Dream
157 / 154 / 16
Регистрация: 26.07.2008
Сообщений: 549
24.10.2008, 12:12  [ТС] #6
Лучший ответ Сообщение было отмечено как решение

Решение

Нашел решение проблемы.
Выкладываю, может кому пригодится.

Этот код просто не дает закрыть программу через крестик:

Код
 
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose:=False;
end;
Этот код выдает запрос на закрытие:

Код
 
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if messagedlg('Реально желаешь закрыть прогу?',
mtconfirmation, [mbYes, mbNo], 0) = mrNo then
canclose := false;
end;
На это тему закрываю.
Спасибо мне огромное.
4
Ranger
9 / 9 / 1
Регистрация: 03.10.2008
Сообщений: 311
22.03.2009, 13:55 #7
КАК СДЕЛАТЬ КРЕСТИК НЕАКТИВНЫМ?
1
Somebody
2799 / 1610 / 251
Регистрация: 03.12.2007
Сообщений: 4,211
Завершенные тесты: 3
22.03.2009, 18:45 #8
Лучший ответ Сообщение было отмечено как решение

Решение

Неактивный крестик и Alt+F4 вместе с ним (в системном меню "Закрыть" остаётся):
Код
SetClassLong(Handle, GCL_STYLE, GetClassLong(Handle, GCL_STYLE) or CS_NOCLOSE);
Неактивный крестик и удаление из системного меню (Alt+F4 остаётся):
Код
DeleteMenu(GetSystemMenu(Handle, false), SC_CLOSE, MF_BYCOMMAND);
И в любом случае для перерисовки после этого:
Код
SetWindowPos(Handle, 0, 0, 0, 0, 0,
  SWP_FRAMECHANGED or SWP_NOMOVE or SWP_NOSIZE or SWP_NOZORDER);
3
alexander-rsh
1 / 1 / 1
Регистрация: 24.03.2009
Сообщений: 9
24.03.2009, 15:53 #9
в OnClose прописать:
action:=caNone;
0
pro_512
9 / 9 / 1
Регистрация: 15.12.2009
Сообщений: 85
27.02.2010, 15:18 #10
Delphi
1
2
3
4
5
6
7
procedure TForm1.Button1Click(Sender: TObject);
var
 SysMenu: HMenu;
begin
 SysMenu:=GetSystemMenu(Handle, False);
 Windows.EnableMenuItem(SysMenu ,SC_CLOSE, MF_DISABLED Or MF_GRAYED);
end;
1
саша40
-10 / 287 / 47
Регистрация: 14.08.2012
Сообщений: 2,522
30.08.2012, 17:20 #11
просто свойство BorderIcon->SystemMeny поменять на false и креста ваще нет. А если ваще чтобы прогу можно было закрыть только по команде Form1.Close то надо заблокировать паель задач
0
30.08.2012, 17:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.08.2012, 17:20
Привет! Вот еще темы с решениями:

Как отследить закрытие программы
Подскажите пожалуйста как можно отследить закрытие программы(или процесса) из...

Запрет на закрытие программы
Добрый день, форумчане. Мне необходимо запретить пользователю закрывать моё...

Запрет на закрытие формы
Здравствуйте, подскажите пожалуйста, как реализовать запрет на закрытие формы:...

Запрет на закрытие формы
Можно ли сделать так, чтобы при запуске формы vba xl юзер не мог ее закрыть...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru