Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 709

/ вопрос решён /

Здравствуйте, уважаемые эксперты!Как определить что пользователь выключает\перезагружает компьютер и если это так то memo1.lines.savetofile('ляляля');

Аксион Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Аксион (статус: 4-ый класс)
Вопрос отправлен: 7 июля 2007, 14:14
Состояние вопроса: решён, ответов: 2.

Ответ #1. Отвечает эксперт: Градов Ю.М.

Здравствуйте, Матвеев Мефодий Олегович!
Решение вопроса в приложении:

Приложение:
  1. private
  2. procedure WMQueryEndSession (var Msg : TWMQueryEndSession); message WM_QueryEndSession;
  3. end;
  4.  
  5. Implementation
  6.  
  7. procedure TForm1.WMQueryEndSession (var Msg : TWMQueryEndSession);
  8. begin
  9.  
  10. mtConfirmation,
  11. [mbYes,mbNo], 0) = mrNo then
  12. Msg.Result := 0
  13. else
  14. Msg.Result := 1;
  15.  
  16. end;
  17.  


Ответ отправил: Градов Ю.М. (статус: 8-ой класс)
Время отправки: 7 июля 2007, 15:14
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: min@y™

Хотелось бы добавить в предыдущему ответу:

"The WM_QUERYENDSESSION message is sent to all applications when the user chooses to end the session or when an application calls the ExitWindows function.
If any application returns zero, the session is not ended. The system stops sending WM_QUERYENDSESSION messages as soon as one application returns zero.
After processing this message, the system sends the WM_ENDSESSION message with the wParam parameter set to the results of the WM_QUERYENDSESSION message."

Т.е. в случае Msg.Result := 0 Windows в ребут/шатдаун не уйдёт и продолжит работу.

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 9 июля 2007, 08:39
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 6; последнее сообщение — 10 июля 2007, 11:53; участников в обсуждении: 3.
Аксион

Аксион (статус: 4-ый класс), 7 июля 2007, 16:59 [#1]:

Ю.М. дело в том что всё что вы мне посоветовали работает, но как только программа определяет что комп сейчас вырубится ана записывает кучу данных в реестр, а потом она выключается, точнее должна, но этого не происходит, а самое главное что комп не вырубается, все программы вырубаются а комп нет это происходит только в XP, в Windows Vista всё нормально.Не посоветуете как быть с XP?
Градов Ю.М.

Градов Ю.М. (статус: 8-ой класс), 7 июля 2007, 17:15 [#2]:

Я попробовал в XP, все в норме - попробуйте наоборот, сначала сохранить все из Мемо:
else
//Процедура сохранения Memo1
Msg.Result := 1;
..........
и запускайте не из Delphi, а скомпилированный файл.
Dron

Dron (статус: Студент), 7 июля 2007, 18:58 [#3]:

Попробуйте вот что:

procedure TfrmMain.WMQueryEndSession(var Message: TWMQueryEndSession);
begin
inherited;
//Действия при закрытии
Message.Result := 1;
end;
С уважением.
Аксион

Аксион (статус: 4-ый класс), 10 июля 2007, 11:19 [#4]:

спасибо dron - всё работает
Аксион

Аксион (статус: 4-ый класс), 10 июля 2007, 11:47 [#5]:

dron, а для чего inherited;
Dron

Dron (статус: Студент), 10 июля 2007, 11:53 [#6]:

Возьмите любой учебник по ООП и изучайте его. Хорошо, что вопрос был не "А для чего begin?"...
С уважением.

31 января 2011, 19:27: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:45
Выполнено за 0.02 сек.