![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отменить Close?
NewSer © (2008-04-12 08:38:00)Как остановить выполнение функции Close? Т.е. сделать так, чтобы если пользователь случайно нажал кнопку "Закрыть" (в заголовке формы [x]), появилось окно, в котором нажатие на "Нет" отменило бы закрытие окна.
Danco (2008-04-12 20:41:00) [1]
> NewSer (12.04.08 17:08) [19]
>
> ))))))) Опять загадки!
>
> > данный код в некоторой степени - опасный!
>
> Только я успел воспользоваться подсказкой
> >Danco © (12.04.08 08:58) [2] и > {RASkov} © (12.04.
> 08 09:11) [4]
> как получил новую, и снова с подвохом ;-)
Опасный в том случае если ты собираешься сохранять важную информацию при закрытии программы... :)
Пробегал3... (2008-04-12 20:40:00) [2]
> "плох" тем, что может препятствовать нормальному завершению
> работы виндовс....
И что тут плохого? Многие считают что даже наоборот ...
Loginov Dmitry (2008-04-12 19:59:00) [3]> Как остановить выполнение функции Close? Т.е. сделать так,
> чтобы если пользователь случайно нажал кнопку "Закрыть"
> (в заголовке формы [x]), появилось окно, в котором нажатие
> на "Нет" отменило бы закрытие окна.
ЗАЧЕМ ЭТО ДЕЛАТЬ! Пускай оконо закроется! Что тут страшного? Зато пользователя не будешь доставать пустыми сообщениями!
Другое дело - когда ошибочное закрытие программы может привести к потере важных данных. Тут уж будь добр предоставить возможность отмены!
AIK (2008-04-12 17:37:00) [4]
> NewSer (12.04.08 17:08) [19]
> ))))))) Опять загадки!
>
> > данный код в некоторой степени - опасный!
>
> Только я успел воспользоваться подсказкой
> >Danco © (12.04.08 08:58) [2] и > {RASkov} © (12.04.
> 08 09:11) [4]
> как получил новую, и снова с подвохом ;-)
см. пост 5, 6
NewSer (2008-04-12 17:08:00) [5]))))))) Опять загадки!
> данный код в некоторой степени - опасный!
Только я успел воспользоваться подсказкой
>Danco © (12.04.08 08:58) [2]и > {RASkov} © (12.04.08 09:11) [4]
как получил новую, и снова с подвохом ;-)
{RASkov} (2008-04-12 12:16:00) [6]> [17] Danco © (12.04.08 11:58)
> этот код намного лучше ...используй его)
Все зависит от задачи, и поэтому данный код в некоторой степени - опасный! :)
Danco (2008-04-12 11:58:00) [7]> 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`у
Danco (2008-04-12 11:52:00) [8]> {RASkov}
> На завершение Виндовс это не влияет, более того... при завершении
> виндовс, данный обработчик(OnClose) не выполняется!
Проверил ...все отлично ...спасибо )
{RASkov} (2008-04-12 11:38:00) [9]На завершение Виндовс это не влияет, более того... при завершении виндовс, данный обработчик(OnClose) не выполняется!
{RASkov} (2008-04-12 11:36:00) [10]> где выставлять параметр Action.
т.е. чтоб предотвратить "закрытие пользователем" нужно выставить var параметр обработчика OnClose - Action:=caNone
{RASkov} (2008-04-12 11:31:00) [11]> [11] Danco © (12.04.08 11:24)
> Если у тебя есть вариант по лучше... то поделись ..мне то
> же интересно узнать)
Если "принудительное" закрытие программы окажеться без серьезных последствий, например не нужно сохранять данные введенные пользователем, то перенести алгоритм вопроса о закрытии программы с OnCloseQuery в OnClose где выставлять параметр Action.
А иначе он(OnCloseQuery) для того и придуман, чтоб предотвратить потерю данных....
{RASkov} (2008-04-12 11:25:00) [12]Кстати, чтоб Рипли это дело не раздражало, то нужно такое поведение программы сделать опционально.... причем с "галочкой" в самом вопросе)
:о)
Danco (2008-04-12 11:24:00) [13]> {RASkov}
Если у тебя есть вариант по лучше... то поделись ..мне то же интересно узнать)
2 программы и именно так работают... самого раздражает, что мешает выключению виндовс ...как от этого избавиться? :)
{RASkov} (2008-04-12 11:20:00) [14]> [9] Danco © (12.04.08 11:13)
> не ругайся :)
когда ругаются - смайлы ставят? :)
Смайл(Smile), если что - улыбка. Хотя есть и злые, страшные, гневные.... "смайлы" :)
Danco (2008-04-12 11:13:00) [15]
> Раз знаешь о проблеме, то предупреждай, а не просто говори,
> что глупо.
> Тем более, что это не глупо, а всего лишь требует внимания
> ;)
>
неругайся :)
{RASkov} (2008-04-12 11:10:00) [16]> [7] Danco © (12.04.08 11:04)
> > {RASkov}
> да... я знаю
Раз знаешь о проблеме, то предупреждай, а не просто говори, что глупо.
Тем более, что это не глупо, а всего лишь требует внимания ;)
Danco (2008-04-12 11:04:00) [17]> {RASkov}
> Данный обработчик OnCloseQuery "плох" тем, что может препятствовать
> нормальному завершению работы виндовс.... Имей это в виду.
>
> ЗЫ: Сообщение которое не нужно игнорировать при таком подходе,
> хотя.... может зависеть от задачи, но всеж....)
да... я знаю ...поэтому и говорю что не очень хороший вариант... :) но все-таки...)
{RASkov} (2008-04-12 10:57:00) [18]> > А почему ты считаешь, что ...глупо ???
> [5] Leonid Troyanovsky © (12.04.08 10:47)
> WM_QUERYENDSESSION
Да, кстати, забыл я про это указать.
Автору:
Данный обработчик OnCloseQuery "плох" тем, что может препятствовать нормальному завершению работы виндовс.... Имей это в виду.
ЗЫ: Сообщение которое не нужно игнорировать при таком подходе, хотя.... может зависеть от задачи, но всеж....)
Leonid Troyanovsky (2008-04-12 10:47:00) [19]
> {RASkov} © (12.04.08 09:11) [4]
> CanClose:=MessageBox()=...;
& WM_QUERYENDSESSION
--
Regards, LVT.
{RASkov} (2008-04-12 09:11:00) [20]> [3] NewSer (12.04.08 09:05)
> А почему ты считаешь, что ...глупо ???
Потому как логическое условие проверяет, а затем переменной назначает так же логическое значение.....
Да еще и Halt нафик не нужен...
CanClose:=MessageBox()=...;