Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как отменить Close?


Страницы:   1 2

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()=...;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо