![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обработать закрытие приожения [D7, WinXP]
Dot © (2005-07-14 22:37:00)Здравствуйте глубокоуважаемые.
Помогите пожалуйста ответом на вопрос.
Как мне обработать событие закрытия приложения. ТО есть приложение вечно висит в процессах, но при завершении работы ОС (т.е. ОС шлет сообщения WM_CLOSE или вроде того всем приложениям) мое приложение совершало бы какие либо действия. Планировщик так сказать.
я думаю что то вроде
if GetMessage(WM_CLOSE) then
ну в обем как правильно?
alpet (2005-07-15 13:48:00) [1]Твое приложение врядли сможет отловить "событие" завершения, особенно с учетом количества способов завершения.
Просто Джо (2005-07-15 03:41:00) [2]
> [4] Dot (14.07.05 23:18)
> НУ так мне и нужен просто синтаксис команды, какое сообщение
> системы пришло моему приложению
Нет никакой такой "комманды". Забудь. Есть принципы программирования под конкретной платформой.
Просто Джо (2005-07-15 03:35:00) [3]Лично я (а я не знаток в программировании на "чистом" WinAPI) могу предложить навскидку несколько вариантов цикла обработки сообщений. Все они сводятся к банальному
while(GetMessage(msg, 0, 0, 0)) do
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
с вариациями.
Но, пока ты не обнародовал свой вариант того, что ты называешь " у меня нет формы" и " приложение вечно висит в процессах" лично мне жаль своего времени на растолковывание непонятно чего и непонятно зачем.
Dot (2005-07-14 23:18:00) [4]НУ так мне и нужен просто синтаксис команды, какое сообщение системы пришло моему приложению
Просто Джо (2005-07-14 22:53:00) [5]Тогда в цикле выборки сообщений нужно фильтровать сообщение WM_QUERYENDSESSION. Или что значит "вишу как процесс"?
dot (2005-07-14 22:46:00) [6]Извините поправка, я сказал вишу как процесс. у меня нет формы.
Просто Джо (2005-07-14 22:41:00) [7]Например, обрабатывать событие формы OnClose или OnCloseQuery. Кроме того, не помешало бы обрабатывать сообщение WM_QUERYENDSESSION. Например, так:
TForm1 = class(TForm)
private
procedure WmQueryEndSession (var Message: TMessage); message WM_QUERYENDSESSION;
public
end;
...
procedure TForm1.WmQueryEndSession(var Message: TMessage);
begin
// разрешаем завершение сеанса
Message.Result := 1;
end;