|
Вопрос # 709/ вопрос решён / |
|
Здравствуйте, уважаемые эксперты!Как определить что пользователь выключает\перезагружает компьютер и если это так то memo1.lines.savetofile('ляляля');
 |
Вопрос задал: Аксион (статус: 4-ый класс)
Вопрос отправлен: 7 июля 2007, 14:14
Состояние вопроса: решён, ответов: 2.
|
Ответ #1. Отвечает эксперт: Градов Ю.М.
Здравствуйте, Матвеев Мефодий Олегович!
Решение вопроса в приложении:
Приложение: Переключить в обычный режим- private
- procedure WMQueryEndSession (var Msg : TWMQueryEndSession); message WM_QueryEndSession;
- end;
-
- Implementation
-
- procedure TForm1.WMQueryEndSession (var Msg : TWMQueryEndSession);
- begin
-
- mtConfirmation,
- [mbYes,mbNo], 0) = mrNo then
- Msg.Result := 0
- else
- Msg.Result := 1;
-
- end;
-
 |
Ответ отправил: Градов Ю.М. (статус: 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 (статус: Студент), 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 (статус: Студент), 10 июля 2007, 11:53 [#6]:
Возьмите любой учебник по ООП и изучайте его. Хорошо, что вопрос был не "А для чего begin?"...
С уважением.
|
31 января 2011, 19:27: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|