Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.05.11;
Скачать: CL | DM;

Вниз

Как отменить 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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.017 c
2-1207913235
Rhammer
2008-04-11 15:27
2008.05.11
Проблемы при переборе символов в строке


3-1196078709
Тимур
2007-11-26 15:05
2008.05.11
SQL.ADD выдает ошибку


15-1206518179
asdf2
2008-03-26 10:56
2008.05.11
Как сравнить строки на "похожесть"?


9-1169656146
maxProg
2007-01-24 19:29
2008.05.11
DirectX - 2D


15-1206383615
VirEx
2008-03-24 21:33
2008.05.11
помогите найти TreeCheckListView