![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Трабл: Программа не дает выключить комп [D5, WinXP]
freeborn © (2003-08-24 22:00:00)
Здравствуйте !!
Написал я программу, которая сидит в трее. При попытке вырубить комп, он не вырубается. Когда закрываешь прогу, только тогда вырубается. Помогите, профи !!
Александр aka freeborn.
Verg (2003-08-27 11:26:00) [1]
Я делаю так: В главной форме есть поле ShutDown :boolean;
В обработчике WM_QUERYENDSESSION устанавливаю эту переменную в true и вызываю inherited
А в OnCloseQuery проеверяю:
if not ShutDown then
begin
// тут запросы юзеру типа "вы уверены?"
Если что - CanClose:=false;
end;
if CanClose then
begin
//закрываю БД, освобождаю ресурсы и проч.
end;
Alex No (2003-08-27 09:17:00) [2]
to: freeborn
Скорее всего у тебя NMPOP3 используется. Выкинь его и возьми с вкладки Indy Clients.
А сам обработчик примерно так можно сделать:
protected
procedure IsWindowsShutDown(Var Msg:TMessage); message WM_ENDSESSION;
procedure TMain_Form.MyExitProc;
var ini : TIniFile;
begin
ini:=TIniFile.Create(IniName);
ini.WriteInteger("Form", "Left", Left);
ini.WriteInteger("Form", "Top", Top);
ini.WriteInteger("Form", "Height", Height);
ini.WriteInteger("Form", "Width", Width);
ini.Free;
try
if MyPOP.Connected then
MyPOP.Disconnect;
except
end;
end;
procedure TMain_Form.IsWindowsShutDown(Var Msg:TMessage);
Begin
WriteLog(true, true, "WINDOWS", "ОС Windows завершила работу");
Msg.Result:=10; // типа > 0
Close;
End;
procedure TMain_Form.FormClose(Sender: TObject; var Action: TCloseAction);
begin
MyExitProc;
end;
В этом случает при пользовательском закритии проги, либо когда винда завершается выполняются одни и те же действия "корректного" завершения работы проги.
Примерно так. Ну у меня так ;)
Zergling (2003-08-27 06:12:00) [3]
Извеняйте за такое опоздание. Забыл про эту веточку!
Fay (25.08.03 20:04) [8]
В OnCloseQuery у меня MessageDlg для поддверждения закрытия программы. Взависимости ответа определяется закрыть приложение или нет.
Fay (2003-08-25 20:04:00) [4]
OnCloseQuery водится?
Карелин Артем (2003-08-25 14:04:00) [5]
Этим прославились компоненты от NetMasters. В дельфи имеют прификс NM...
Zergling (2003-08-25 11:03:00) [6]
У меня такая же грабля. У меня закрывается при условии: программу свернутую в трее вызываю (разворачиваю), а затем опять сворачиваю в трей. После этого Alt+F4 и все закрывается. Если этих действий не проделать, то прга не сворачивается. Программа работает с сетью, но сокетов я не использую. В чем может быть проблема?
freeborn ты примерчик случаем не из книги "Дельфи и технология COM" брал. У меня из этой книги.
Dimka Maslov (2003-08-25 09:17:00) [7]
Такое иногда бывает, когда есть соединение через сеть. Если сокет открыт, то система сосздаёт поток, который и обрабатывает сообщение WM_QUERYENDSESSION не давая системе выключиться или перезагрузиться. Лечение проблемы - принудительное закрытие сокета при получении WM_QUERYENDSESSION. Причём закрывать сокет лучше в Application.OnMessage по идее он должен получить зто сообщение в первую очередь.
sniknik (2003-08-24 22:27:00) [8]
Sheng © (24.08.03 22:14) [1]
Попробуй отловить WM_QUERYENDSESSION, на нём повесь принудительное закрытие программы.
Guerrillero © (24.08.03 22:23) [3]
илиWM_ENDSESSION
от себя, а лутше не или а и.
Guerrillero (2003-08-24 22:23:00) [9]
или WM_ENDSESSION
freeborn (2003-08-24 22:17:00) [10]
уже пробовал. не помогает. при этом в на close и destroy прога ничего не делает. правда есть таймер (всл), который проверяет мейл через поп3. вот и вся кухня. помогите плз. спасибо !!
Sheng (2003-08-24 22:14:00) [11]
Попробуй отловить WM_QUERYENDSESSION, на нём повесь пранудительное закрытие программы.