Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обработать закрытие приожения [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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо