![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
нельзя выполнить ShutDown :( [D6, WinXP]
Novichok © (2004-02-28 23:18:00)Когда запущена моя программа, нельзя выполнить ShutDown или Restart машины, если прогу выключить то все ok, система спокойно выключается. Программа небольшой чат с сокетами. Стал обрабатывать событие OnCloseQuery :
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
try // Если не ставить try вылетает ошибка
Form1.Close;
except
end;
end;
Если делать так, то прога закрывается, но завершение работы дальше не продолжается.
Уважаемые мастера что делать ?
JSilver (2004-03-03 20:33:00) [1]Короче, если хочешь все сам узнать ищи в FAQ или книгах по Делфи тему про завершение винды и как правильно на это реагировать.
Если приложение активно и вы пытаетесь завершить работу Windows (Shut Down), происходят следующие события (с соблюдением последовательности):
1.FormCloseQuery
2.FormDestroy
Мы видим, что метод FormClose в этом случае не вызывается.
private
{--------------------------------------------------------}
{ Объявляем свой обработчик сообщения WM_QUERYENDSESSION }
{--------------------------------------------------------}
procedure WMQueryEndSession(
var Message: TWMQueryEndSession); message WM_QUERYENDSESSION;
procedure TForm1.WMQueryEndSession(var Message: TWMQueryEndSession);
begin
inherited; { сначала сообщание должен обработать наследуемый метод }
{------------------------------------------------------------}
{ в этой точке вы также можете сообщить Windows о неготовности }
{ приложения завершить работу... }
{ Message.Result:=0; }
{--------------------------------------или----------------------}
{ вызов процедуры освобождения ресурсов, предусмотренной в FormClose }
{-------------------------------------------------------------}
end;
Lexer (2004-02-29 12:50:00) [2]
> DDA © (29.02.04 11:53) [2]
> Ну наверное раз программа дошла уже до процедуры CloseQuery,
> то программы уже закрывается и не стоит закрывать ее ещё
> раз (Form1.Close)
ага, надо просто сделать проверку и установить CanClose в True
Novichok (2004-02-29 12:48:00) [3]DDA
> уже закрывается и не стоит закрывать ее ещё раз (Form1.Close)
Если не делать Form1.close; то прога вообще не выключается, не после первой не после второй попытки
> МАКСЮХА >попробуй сделать перед выходом глубокий диссконнескт...
ClientSocket1.Destroy ? ClientSocket1.active:=false (так я дклал, не помогло)
Pashka R.
> нужно обрабатывать WM_QUERYENDSESSION :)
Разве это не одно и то же что OnCloseQuery ???
Pashka R. (2004-02-29 12:37:00) [4]сорри, нужно обрабатывать WM_QUERYENDSESSION :)
---
Best regards, Pashka R. <pashka@land.ru>
ICQ: 860730
Pashka R. (2004-02-29 12:32:00) [5]тебе надо обрабатывать сообщение WM_ENDSESSIONи по нему закрывать свою прогу
---
Best regards, Pashka R. <pashka@land.ru>
ICQ: 860730
DDA (2004-02-29 11:53:00) [6]Ну наверное раз программа дошла уже до процедуры CloseQuery,
то программы уже закрывается и не стоит закрывать ее ещё раз (Form1.Close)
МАКСЮХА (2004-02-29 10:52:00) [7]Я так и думал, что чат:)
Была та - же проблема... попробуй сделать перед выходом глубокий диссконнескт...