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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2011, 21:30   #1
troyan32
Пользователь
 
Регистрация: 30.01.2011
Сообщений: 31
Вопрос Не закрывать форму

Я сделал показ сообщения при закрытии(onClose). Вопрос: как сказать компилятору, что не надо закрывать приложение?

Последний раз редактировалось troyan32; 05.04.2011 в 21:35.
troyan32 вне форума Ответить с цитированием
Старый 05.04.2011, 21:37   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
как сказать компилятору, что не надо закрывать приложение?
Телепаты в отпуске. Но я попытаюсь:
Вы хотите сказать "Что при нажатии "Нет" в диалоге" Программа продолжила работать?
Человек_Борща вне форума Ответить с цитированием
Старый 06.04.2011, 09:19   #3
tsar_
Форумчанин
 
Аватар для tsar_
 
Регистрация: 06.01.2011
Сообщений: 369
По умолчанию

Если я правильно понял- нужно при попытке закрытия проги пользователю предлагается решить окончательно: закрывать прогу или нет.
Если это так, то я бы обрабатывал событие OnCloseQuery (ЗАПРОС на закрытие проги), там есть параметр CanClose.
Если ему присвоить true, то прогу можно закрывать нажатием на крестик, клавишами alt+f4 и др.
Если же его значение false, то закрытие программы этими ("мягкими") методами игнорируется.
Программирую по необходимости
tsar_ вне форума Ответить с цитированием
Старый 06.04.2011, 10:57   #4
troyan32
Пользователь
 
Регистрация: 30.01.2011
Сообщений: 31
По умолчанию

Похоже tsar_ меня понял.
я создал событие OnCloseQuery:
Код:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var i:integer;
begin
  i:=Application.MessageBox('Вы точно хотите выйти с рабочим проектом?','Выйти?', MB_YESNO or MB_ICONQUESTION);
   if i=6 then CanClose:=true else CanClose:=false;
  end;
troyan32 вне форума Ответить с цитированием
Старый 07.04.2011, 11:18   #5
Lifefine
Пользователь
 
Регистрация: 03.10.2008
Сообщений: 93
По умолчанию

Цитата:
Сообщение от troyan32 Посмотреть сообщение
Похоже tsar_ меня понял.
я создал событие OnCloseQuery:
Код:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var i:integer;
begin
  i:=Application.MessageBox('Вы точно хотите выйти с рабочим проектом?','Выйти?', MB_YESNO or MB_ICONQUESTION);
   if i=6 then CanClose:=true else CanClose:=false;
  end;
Интересно, а почему
Код:
i=6...
Lifefine вне форума Ответить с цитированием
Старый 07.04.2011, 12:05   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Телепаю: Посмотрел значение константы IDYES... и завел лишнюю переменную, вместо простого сравнения.
p51x вне форума Ответить с цитированием
Старый 07.04.2011, 12:26   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Сообщение от Lifefine Посмотреть сообщение
Интересно, а почему
Код:
i=6...
потому что константа IDOK = 6...
и даный код можно привести в более простой вариант:
Код:
begin
   if Application.MessageBox('Вы точно хотите выйти с рабочим проектом?','Выйти?', MB_YESNO or MB_ICONQUESTION) = IDOK then
     CanClose:=true
      else 
     CanClose:=false;
  end;
Человек_Борща вне форума Ответить с цитированием
Старый 07.04.2011, 13:24   #8
Romantik_FM
Пользователь
 
Аватар для Romantik_FM
 
Регистрация: 21.12.2010
Сообщений: 12
По умолчанию

Код:
case MessageBox(Handle, 'Вы хотите выйти?' , 'Выход', MB_YESNO + MB_ICONQUESTION)  of
  IDYES:
    begin
     CanClose:=true;
    end;
  IDNO:
    begin
     CanClose:=false;
    end;
end;
Не ошибается тот, кто ничего не делает
Romantik_FM вне форума Ответить с цитированием
Старый 07.04.2011, 13:38   #9
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Разницы никакой. На диалоге всего 2 кнопки и условие if then прекрасно подходит=)
Было бы 3 тогда уместен case of
Человек_Борща вне форума Ответить с цитированием
Старый 23.08.2011, 14:53   #10
hon
Форумчанин
 
Регистрация: 08.06.2011
Сообщений: 693
Сообщение

Код:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if Memo1.Modified then
case Application.MessageBox('Сохранить данные?','Выберите операцию',MB_YESNOCANCEL) of
IDYES : {действия по сохранению данных};
IDNO : Action:=caHide; {отказ от сохранения данных}
IDCANCEL : Action:=caNone; {отмена закрытия формы}
end;
end;
Работает.
hon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как создать форму в ручную и освободить из памяти предыдущую форму, на С++Builder 2009? AndreyK Общие вопросы C/C++ 1 18.01.2012 20:54
Не закрывать страницу 1 минуту GoldmasteR PHP 1 21.12.2010 12:07
не знаю куда писать поэтому пишу сюда просьба тему не закрывать а переместить в нужный раздел если такой DarkAngelOfLight Свободное общение 16 16.10.2010 02:59
Как закрывать форму с активным idTCPServer'ом TwiX Работа с сетью в Delphi 1 21.03.2010 20:45
Одну и ту же форму использовать как MDI-child форму и как модальную форму? PrimaryPro Общие вопросы Delphi 2 10.03.2010 20:52