Форум: "Система";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
ВнизТрабл: Программа не дает выключить комп Найти похожие ветки
← →
freeborn (2003-08-24 22:00) [0]Здравствуйте !!
Написал я программу, которая сидит в трее. При попытке вырубить комп, он не вырубается. Когда закрываешь прогу, только тогда вырубается. Помогите, профи !!
Александр aka freeborn.
← →
Sheng (2003-08-24 22:14) [1]Попробуй отловить WM_QUERYENDSESSION, на нём повесь пранудительное закрытие программы.
← →
freeborn (2003-08-24 22:17) [2]уже пробовал. не помогает. при этом в на close и destroy прога ничего не делает. правда есть таймер (всл), который проверяет мейл через поп3. вот и вся кухня. помогите плз. спасибо !!
← →
Guerrillero (2003-08-24 22:23) [3]или WM_ENDSESSION
← →
sniknik (2003-08-24 22:27) [4]Sheng © (24.08.03 22:14) [1]
Попробуй отловить WM_QUERYENDSESSION, на нём повесь принудительное закрытие программы.
Guerrillero © (24.08.03 22:23) [3]
или WM_ENDSESSION
от себя, а лутше не или а и.
← →
Dimka Maslov (2003-08-25 09:17) [5]Такое иногда бывает, когда есть соединение через сеть. Если сокет открыт, то система сосздаёт поток, который и обрабатывает сообщение WM_QUERYENDSESSION не давая системе выключиться или перезагрузиться. Лечение проблемы - принудительное закрытие сокета при получении WM_QUERYENDSESSION. Причём закрывать сокет лучше в Application.OnMessage по идее он должен получить зто сообщение в первую очередь.
← →
Zergling (2003-08-25 11:03) [6]У меня такая же грабля. У меня закрывается при условии: программу свернутую в трее вызываю (разворачиваю), а затем опять сворачиваю в трей. После этого Alt+F4 и все закрывается. Если этих действий не проделать, то прга не сворачивается. Программа работает с сетью, но сокетов я не использую. В чем может быть проблема?
freeborn ты примерчик случаем не из книги "Дельфи и технология COM" брал. У меня из этой книги.
← →
Карелин Артем (2003-08-25 14:04) [7]Этим прославились компоненты от NetMasters. В дельфи имеют прификс NM...
← →
Fay (2003-08-25 20:04) [8]OnCloseQuery водится?
← →
Zergling (2003-08-27 06:12) [9]Извеняйте за такое опоздание. Забыл про эту веточку!
Fay (25.08.03 20:04) [8]
В OnCloseQuery у меня MessageDlg для поддверждения закрытия программы. Взависимости ответа определяется закрыть приложение или нет.
← →
Alex No (2003-08-27 09:17) [10]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;
В этом случает при пользовательском закритии проги, либо когда винда завершается выполняются одни и те же действия "корректного" завершения работы проги.
Примерно так. Ну у меня так ;)
← →
Verg (2003-08-27 11:26) [11]Я делаю так: В главной форме есть поле ShutDown :boolean;
В обработчике WM_QUERYENDSESSION устанавливаю эту переменную в true и вызываю inherited
А в OnCloseQuery проеверяю:
if not ShutDown then
begin
// тут запросы юзеру типа "вы уверены?"
Если что - CanClose:=false;
end;
if CanClose then
begin
//закрываю БД, освобождаю ресурсы и проч.
end;
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.032 c