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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.03.2013, 08:44   #1
Решетова Алена
Форумчанин
 
Регистрация: 13.12.2012
Сообщений: 116
По умолчанию Delphi выход из программы только с кнопки

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

Из лабы: "Нужно запретить выход из программы стандартными способами, перехватив событие формы OnCloseQuery разрешив закрытие программы лишь в случае нажатия мышкой на клавишу "Выход"..."

Для кнопки я написала так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
Close;
end;
Работало, до тех пор, пока я не написала для крестика. Пробовала разные варианты. 2 из них:

Код:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action:=caNone;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose:=false;
end;
В обоих случаях форма не закрывалась ни на крестик ни на кнопку, вообще никак.

Последний раз редактировалось Решетова Алена; 06.03.2013 в 08:55.
Решетова Алена вне форума Ответить с цитированием
Старый 06.03.2013, 09:01   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

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

Код:
public
  IsButton: boolean;

...
...


procedure TForm1.OnCreate(Sender: TObject);
begin
  IsButton:=false;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  IsButton:=true;
  Close;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if not IsButton then action:=caNone;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  If not IsButton then CanClose:=false;
end;
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 06.03.2013, 09:02   #3
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,281
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ModalResult := mrOk;
  Close;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose := ModalResult <> mrNone;
end;
Sibedir вне форума Ответить с цитированием
Старый 06.03.2013, 09:07   #4
Решетова Алена
Форумчанин
 
Регистрация: 13.12.2012
Сообщений: 116
По умолчанию

Спасибо, спасибо)) Я уже нашла вариант)

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
Button1.tag:=1;
Close;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
If Button1.tag=1 then CanClose:=true
Else CanClose:=false;
end;
Решетова Алена вне форума Ответить с цитированием
Старый 06.03.2013, 09:08   #5
Решетова Алена
Форумчанин
 
Регистрация: 13.12.2012
Сообщений: 116
По умолчанию

Может кому пригодится)
Решетова Алена вне форума Ответить с цитированием
Старый 06.03.2013, 09:14   #6
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,281
По умолчанию

Сама? Умничка
Не, серьёзно, Это всегда радует.
Sibedir вне форума Ответить с цитированием
Старый 06.03.2013, 09:19   #7
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сама? Умничка
Не, серьёзно, Это всегда радует.
Присоединяюсь. Молодец! $)
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
выход из программы... Vavrenyuk Общие вопросы Delphi 10 15.11.2012 12:05
Кнопка Выход(на выход Из программы)С++ Напишите код ProGec4 Общие вопросы C/C++ 3 19.02.2012 15:36
Выход программы. ZvEr_HaCkEr Свободное общение 26 16.10.2010 21:00
выход из while посредством нажатия кнопки delphi Maddy Помощь студентам 0 25.04.2010 17:37
Выход из программы relav_ Общие вопросы Delphi 18 15.03.2008 01:36