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

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

Процес не завершается [D7, 2000, XP, 2003]


Страницы:   1 2

KyRo ©   (2006-08-15 16:11:00) 

У меня проблема моя програмка запускается и после запуска сразу прячется в трей . На ней работают несколько таймеров которые с определенным интервалом выполняют свои задачи и все бы хорошо , но когда я пытаюсь перезагрузить компьютер или выключить его прога не дает этого сделать пока ее не выключиш.
Как сделать что бы она давала мне возможность правильно выключать комп или как отловить что комп получил команду перезагрузки или выключения ?


KyRo   (2006-08-16 15:25:00) [21]

Но если я перхватывал сообщение то оно поступало !!!


Сергей М.   (2006-08-16 15:18:00) [22]

Значит сообщение не поступает.


KyRo   (2006-08-16 15:11:00) [23]

нет брейкпойнт на этой строчке не ловлю


Сергей М.   (2006-08-16 15:08:00) [24]

А брейкпойнт ловишь на этой строчке ?


KyRo   (2006-08-16 15:01:00) [25]

Убрал как ты советуеш и прописал
CanClose := True;
результат тот же программа не завершает работу


Сергей М.   (2006-08-16 14:30:00) [26]

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

function TCustomForm.CloseQuery: Boolean;
var
 I: Integer;
begin
 if FormStyle = fsMDIForm then
 begin
   Result := False;
   for I := 0 to MDIChildCount - 1 do
     if not MDIChildren[I].CloseQuery then Exit;
 end;
 Result := True;
 if Assigned(FOnCloseQuery) then FOnCloseQuery(Self, Result);
end;

procedure TCustomForm.WMQueryEndSession(var Message: TWMQueryEndSession);
begin
 Message.Result := Integer(CloseQuery and CallTerminateProcs);
end;


Сергей М.   (2006-08-16 14:27:00) [27]


> KyRo   (16.08.06 14:23) [13]


Ерундой ты занялся.
Достаточно обработать событие OnCloseQuery главной формы приложения, написав там

CanClose := True;


KyRo   (2006-08-16 14:23:00) [28]

Нет сделал  так

procedure WMQueryEndSession(var Msg: TWMQueryEndSession);  message WM_QUERYENDSESSION;

Procedure TATM.WMQueryEndSession(var Msg: TWMQueryEndSession);
 begin
   Msg.Result := 0;
   inherited;
   Close;
 end;


Отлавливает логоф , перезагрузку и выключение .
Срабатывает мое Close; и программа закрывается но при этом оно как то тушит сообщение виндовс и хоть программа уже и не запущена но винда дальше не перезагружается и перезагрузится  если повторить команду.
Как сделать что бы прога не убивала это сообщение или послала виндовс аналогичный меседж. ?


Сергей М.   (2006-08-16 13:58:00) [29]

А если без "запуздыривания в трей, там где часики" ?
Что, тоже "не отлавливает" ?


KyRo   (2006-08-16 13:50:00) [30]

if Msg.message= WM_QUERYENDSESSION
  then
    Close;

Не подходит то что вы посоветовали не отлавливает оно завершение сессии


Leonid Troyanovsky   (2006-08-15 18:15:00) [31]


> Сергей М. ©   (15.08.06 16:57) [7]

> Например, в обработчике Application.OnMessage


Вряд ли. Оно ж is sent.

--
Regards, LVT.


KyRo   (2006-08-15 17:31:00) [32]

Нашол где это событие OnMessage буду пробовать


KyRo   (2006-08-15 17:01:00) [33]


> Сергей М. ©   (15.08.06 16:57) [7]
> Например, в обработчике Application.OnMessage

А можнопо подробнее я этого не когда не делал и  по этому не могу найти этот OnMessage или мне  надо создать этот обработчик в файле проэкта ?


Сергей М.   (2006-08-15 16:57:00) [34]

Например, в обработчике Application.OnMessage


KyRo   (2006-08-15 16:56:00) [35]


> В той же в какой "отлавливаются" все прочие сообщения виндовса.

Тогда подскажите мне где отлавливаются прочие ?


Сергей М.   (2006-08-15 16:54:00) [36]


> в какой части программы отлавливать это сообщение виндовса


В той же в какой "отлавливаются" все прочие сообщения виндовса.


KyRo   (2006-08-15 16:52:00) [37]

WM_QUERYENDSESSION
А я уже нашол что эхто но так и не понял в какой части программы отлавливать это сообщение виндовса


Сергей М.   (2006-08-15 16:44:00) [38]


> И где мне эту ExitWindows прописать ?


Ты с дуба упал ?)

Где ты в [1] увидел хоть что-либо напоминающее необходимость вызова твоей программой ExitWindows() ?


KyRo   (2006-08-15 16:40:00) [39]

И где мне эту ExitWindows прописать ? Я ж не хочу что бы программа перезагружала виндовс или выключала его я хочу что бы пользователь когда выберет в виндовсе завершить работу программа закрылась !


Сергей М.   (2006-08-15 16:25:00) [40]

см. WM_QUERYENDSESSION


Страницы:   1 2

Наверх

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