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

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

Tray+Reboot [D5, Win95/98, Win2k]


BJValentine ©   (2003-05-28 10:52:00) 

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


BJValentine   (2003-05-30 15:21:00) [1]

Спасибо, заработало


Alex Konshin   (2003-05-30 04:50:00) [2]

Ведь отвечал уже на этот вопрос, но не могу найти в поиске по сайту.

Суть в том, что надо завести булевскую переменную, которая контролирует спрашивать/не спрашивать и еще в правильной обработке WM_QUERYENDSESSION:

procedure TfmServerToolBar.WMQueryEndSession(var Message: TWMQueryEndSession);
begin
Init;
FQuietClose := True;
Message.Result := Integer(CallTerminateProcs);
Application.Terminate;
end;


Song   (2003-05-29 22:27:00) [3]

True - это 1.
Если непонятно, то можно было так проверить - Integer(True)


BJValentine   (2003-05-29 18:19:00) [4]

Там пишется, что нужно вернуть true, но delphi на это ругается.


Song   (2003-05-29 17:45:00) [5]

Почитай хэлп, там ясно всё написано.


BJValentine   (2003-05-29 16:01:00) [6]

А какой именно код?


Song   (2003-05-29 15:56:00) [7]

Не хватает вернуть правильный код на то сообщение что я написал.


BJValentine   (2003-05-29 15:36:00) [8]

А в W2k не спабатывает.

У меня получилось, программа закрывается, только вот система не завершает работу. Видать чего-то не хватает. А чего именно?


Sceleton   (2003-05-29 15:24:00) [9]

Я обычно делаю просто, в обработчике события FormCloseQuery основной формы пишу примерно так:

procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
Begin
... операции, которые необходимо сделать перед закрытем программы...
Application.Terminate;
End;

У меня по крайней мере это срабатывает. Проверял в 98 и XP.


ppcat   (2003-05-29 09:34:00) [10]

Есть компонент CoolTrayIcon, там это все реализовано. Ну а если хочешь сам покопаться - смотри, что сказал Song + WM_ENDSESSION.
В обработчике WM_QUERYENDSESSION нужно как минимум вынуть иконку из трэя, но лучше еще послать главному окну своего приложения месидж типа "Закройся". А можно просто сказать Windows, что все в порядке вот так: msg.Result:= 1;


Song   (2003-05-29 08:25:00) [11]

WM_QUERYENDSESSION


BJValentine   (2003-05-28 11:00:00) [12]

В 2000 Pro - ждёт, пока не закрою. Мне понтно почему ждёт, а юзерам-нет.


Мое имя   (2003-05-28 10:58:00) [13]

а чо-не закрываецца?


Наверх

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