Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Программа не дает перезагружать систему


Автор: ilyalyu 27.6.2007, 15:45
Проблема такая. Когда пользователь нажимает на форме кнопку "закрыть" (кнопка с крестиком в правом верхнем углу формы), программа должна не закрываться, а сворачиваться в tray (или как это правильно назвать). Я это сделал с помощью события OnCloseQuery. Однако появилась проблема. Теперь, когда я пытаюсь перезагрузить систему, моя программа сворачивается в tray и система после этого не перезагружается. Очевидно, это происходит из-за того, что ей не удается закрыть мою программу. В связи с этим вопрос - как распознать, что система хочет перезагрузиться и закрыть программу?

Автор: _hunter 27.6.2007, 16:06
лови WM_ENDSESSION. при получении -- выходи.

Автор: MetalFan 27.6.2007, 16:06
Отлавливать
WM_ENDSESSION, WM_QUERYENDSESSION
и закрывацца без всяких разговоров

Автор: dumb 27.6.2007, 16:08
напиши обработчик для WM_QUERYENDSESSION и в нем заканчивай работу своей программы.

Добавлено через 1 минуту и 35 секунд
последний. пойду убью себя... smile

Автор: sw04 27.6.2007, 16:30
Код

protected procedure IsWindowsShutDown(var Msg: TMessage);WM_ENDSESSION;
..

procedure TForm1.IsWindowsShutDown(var Msg: TMessage);
begin 
inherited;
if Msg.WParam = 1 then MainForm.Close; // выгружаем приложение 
End;

Пример из drkb. Автор Song.

Автор: MetalFan 27.6.2007, 17:54
Цитата(dumb @  27.6.2007,  17:08 Найти цитируемый пост)
последний. пойду убью себя... smile 

ну вот, теперь не последний)))
Цитата(sw04 @  27.6.2007,  17:30 Найти цитируемый пост)
Пример из drkb. Автор Song. 


Автор: sw04 27.6.2007, 21:20
Цитата(MetalFan @  27.6.2007,  20:54 Найти цитируемый пост)
ну вот, теперь не последний)))

так это же пример...
слова это одно, а пример действенней.

Автор: ilyalyu 29.6.2007, 05:46
Всем спасибо! smile Небольшой ньюанс: обрабатывать WM_ENDSESSION оказалось недостаточно, потребовалось обрабатывать WM_QUERYENDSESSION, и еще при обработке WM_QUERYENDSESSION надо установить Message.Result := 1. После этого все заработало как надо.

Автор: sw04 29.6.2007, 11:06
ilyalyu, сделай пометку, что вопрос решен.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)