Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.05.11;
Скачать: [xml.tar.bz2];

Вниз

Как отменить Close?   Найти похожие ветки 

 
NewSer   (2008-04-12 08:38) [0]

Как остановить выполнение функции Close? Т.е. сделать так, чтобы если пользователь случайно нажал кнопку "Закрыть" (в заголовке формы [x]), появилось окно, в котором нажатие на "Нет" отменило бы закрытие окна.


 
Riply ©   (2008-04-12 08:44) [1]

> [0] NewSer   (12.04.08 08:38)
> Как остановить выполнение функции Close? Т.е. сделать так,
> чтобы если пользователь случайно нажал кнопку "Закрыть"

Сначала надо понять как определить, что кнопка была нажата именно "случайно" :)
Не знаю как кому, а меня раздражают программы,
спрашивающие "Вы действительно хотите меня закрыть ?"


 
Danco ©   (2008-04-12 08:58) [2]


> NewSer


> Как остановить выполнение функции Close?


procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if Application.MessageBox("Вы действительно хотите закрыть программу?", "Заголовок окна",
    MB_DEFBUTTON1 + MB_ICONEXCLAMATION + MB_YESNO) = IDYES then
    begin
     CanClose:=True;
     Halt;
    end else
     CanClose:=False;
end;


...глупо, но работает =)))


 
NewSer   (2008-04-12 09:05) [3]

Спасибо, Danco!

А почему ты считаешь, что ...глупо ???


 
{RASkov} ©   (2008-04-12 09:11) [4]

> [3] NewSer   (12.04.08 09:05)
> А почему ты считаешь, что ...глупо ???

Потому как логическое условие проверяет, а затем переменной назначает так же логическое значение.....
Да еще и Halt нафик не нужен...
CanClose:=MessageBox()=...;


 
Leonid Troyanovsky ©   (2008-04-12 10:47) [5]


> {RASkov} ©   (12.04.08 09:11) [4]

> CanClose:=MessageBox()=...;

& WM_QUERYENDSESSION

--
Regards, LVT.


 
{RASkov} ©   (2008-04-12 10:57) [6]

> > А почему ты считаешь, что ...глупо ???

> [5] Leonid Troyanovsky ©   (12.04.08 10:47)
> WM_QUERYENDSESSION

Да, кстати, забыл я про это указать.
Автору:
Данный обработчик OnCloseQuery "плох" тем, что может препятствовать нормальному завершению работы виндовс.... Имей это в виду.
ЗЫ: Сообщение которое не нужно игнорировать при таком подходе, хотя.... может зависеть от задачи, но всеж....)


 
Danco ©   (2008-04-12 11:04) [7]

> {RASkov}

> Данный обработчик OnCloseQuery "плох" тем, что может препятствовать
> нормальному завершению работы виндовс.... Имей это в виду.
>
> ЗЫ: Сообщение которое не нужно игнорировать при таком подходе,
>  хотя.... может зависеть от задачи, но всеж....)


да... я знаю ...поэтому и говорю что не очень хороший вариант... :) но все-таки...)


 
{RASkov} ©   (2008-04-12 11:10) [8]

> [7] Danco ©   (12.04.08 11:04)
> > {RASkov}

> да... я знаю

Раз знаешь о проблеме, то предупреждай, а не просто говори, что глупо.
Тем более, что это не глупо, а всего лишь требует внимания ;)


 
Danco ©   (2008-04-12 11:13) [9]


> Раз знаешь о проблеме, то предупреждай, а не просто говори,
>  что глупо.
> Тем более, что это не глупо, а всего лишь требует внимания
> ;)
>

не ругайся :)


 
{RASkov} ©   (2008-04-12 11:20) [10]

> [9] Danco ©   (12.04.08 11:13)
> не ругайся :)

когда ругаются - смайлы ставят? :)
Смайл(Smile), если что - улыбка. Хотя есть и злые, страшные, гневные.... "смайлы" :)


 
Danco ©   (2008-04-12 11:24) [11]

> {RASkov}

Если у тебя есть вариант по лучше... то поделись ..мне то же интересно узнать)
2 программы и именно так работают... самого раздражает, что мешает выключению виндовс ...как от этого избавиться? :)


 
{RASkov} ©   (2008-04-12 11:25) [12]

Кстати, чтоб Рипли это дело не раздражало, то нужно такое поведение программы сделать опционально.... причем с "галочкой" в самом вопросе)
:о)


 
{RASkov} ©   (2008-04-12 11:31) [13]

> [11] Danco ©   (12.04.08 11:24)
> Если у тебя есть вариант по лучше... то поделись ..мне то
> же интересно узнать)

Если "принудительное" закрытие программы окажеться без серьезных последствий, например не нужно сохранять данные введенные пользователем, то перенести алгоритм вопроса о закрытии программы с OnCloseQuery в OnClose где выставлять параметр Action.
А иначе он(OnCloseQuery) для того и придуман, чтоб предотвратить потерю данных....


 
{RASkov} ©   (2008-04-12 11:36) [14]

> где выставлять параметр Action.

т.е. чтоб предотвратить "закрытие пользователем" нужно выставить var параметр обработчика OnClose - Action:=caNone


 
{RASkov} ©   (2008-04-12 11:38) [15]

На завершение Виндовс это не влияет, более того... при завершении виндовс, данный обработчик(OnClose) не выполняется!


 
Danco ©   (2008-04-12 11:52) [16]

> {RASkov}
> На завершение Виндовс это не влияет, более того... при завершении
> виндовс, данный обработчик(OnClose) не выполняется!


Проверил ...все отлично ...спасибо )


 
Danco ©   (2008-04-12 11:58) [17]

> NewSer
> Как остановить выполнение функции Close?
> А почему ты считаешь, что ...глупо ???

этот код намного лучше ...используй его)

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 if Application.MessageBox("Вы действительно хотите закрыть программу?", "Заголовок окна",
    MB_DEFBUTTON1 + MB_ICONINFORMATION + MB_YESNO) = IDYES then
     Action:=caFree
  else
     Action:=caNone;
end;


Ура! RASkov`у


 
{RASkov} ©   (2008-04-12 12:16) [18]

> [17] Danco ©   (12.04.08 11:58)
> этот код намного лучше ...используй его)

Все зависит от задачи, и поэтому данный код в некоторой степени - опасный! :)


 
NewSer   (2008-04-12 17:08) [19]

))))))) Опять загадки!

> данный код в некоторой степени - опасный!

Только я успел воспользоваться подсказкой
>Danco ©   (12.04.08 08:58) [2] и > {RASkov} ©   (12.04.08 09:11) [4]
как получил новую, и снова с подвохом ;-)


 
AIK ©   (2008-04-12 17:37) [20]


> NewSer   (12.04.08 17:08) [19]
> ))))))) Опять загадки!
>
> > данный код в некоторой степени - опасный!
>
> Только я успел воспользоваться подсказкой
> >Danco ©   (12.04.08 08:58) [2] и > {RASkov} ©   (12.04.
> 08 09:11) [4]
> как получил новую, и снова с подвохом ;-)


см. пост 5, 6


 
Loginov Dmitry ©   (2008-04-12 19:59) [21]

> Как остановить выполнение функции Close? Т.е. сделать так,
> чтобы если пользователь случайно нажал кнопку "Закрыть"
> (в заголовке формы [x]), появилось окно, в котором нажатие
> на "Нет" отменило бы закрытие окна.


ЗАЧЕМ ЭТО ДЕЛАТЬ! Пускай оконо закроется! Что тут страшного? Зато пользователя не будешь доставать пустыми сообщениями!
Другое дело - когда ошибочное закрытие программы может привести к потере важных данных. Тут уж будь добр предоставить возможность отмены!


 
Пробегал3...   (2008-04-12 20:40) [22]


> "плох" тем, что может препятствовать нормальному завершению
> работы виндовс....

И что тут плохого? Многие считают что даже наоборот ...


 
Danco ©   (2008-04-12 20:41) [23]


> NewSer   (12.04.08 17:08) [19]
>
> ))))))) Опять загадки!
>
> > данный код в некоторой степени - опасный!
>
> Только я успел воспользоваться подсказкой
> >Danco ©   (12.04.08 08:58) [2] и > {RASkov} ©   (12.04.
> 08 09:11) [4]
> как получил новую, и снова с подвохом ;-)


Опасный в том случае если ты собираешься сохранять важную информацию при закрытии программы... :)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.05.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.008 c
2-1208175929
Антон Вл.
2008-04-14 16:25
2008.05.11
Сортировка


2-1208080633
Megatron
2008-04-13 13:57
2008.05.11
Считывать данные с реестра


15-1206971003
FIL-23
2008-03-31 17:43
2008.05.11
как повернуть на 90 градусов рисунок


2-1208241743
Миша
2008-04-15 10:42
2008.05.11
Титульный лист в программе


15-1206172958
@!!ex
2008-03-22 11:02
2008.05.11
Двойная буфферизация(выдернуто из "Вакансия Delphi программист")





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский