![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
"Правильное" завершение работы программы [D7, WinXP]
denkop © (2004-08-03 02:05:00)Как отличить закрытие формы пользователем от закрытия её виндой. WM_ENDSESSION не проходит, хотя может и проходит, но я не правильно его обрабатываю. Короче вот кусок кода:
public
procedure GetEndSession(var Msg:TMessage); message WM_ENDSESSION;
......
var
Trm:byte;
{в онкреат зануляю этот самый трм}
......
procedure TMainForm.GetEndSession(var Msg:TMessage);
begin
Trm:=1;
Application.Terminate;
end;
procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if (Settings.MinToTray) and (Trm<>1) then
begin
MainForm.Visible:=False;
CanClose:=false;
end;
SettingsForm.WriteSettings;
end;
denkop (2004-08-05 00:19:00) [1]Получилось с помощью WM_QUERYENDSESSION совместно с OnClose. Спасибо за помощь.
GuAV (2004-08-03 02:50:00) [2]А проблема в том что FormCloseQuery происходит до GetEndSession.
попробуй FormClose, чтоб не закрывать - CloseAction:=caNone
или WM_QUERYENDSESSION
GuAV (2004-08-03 02:35:00) [3]
> Application.Terminate;
The application need not call the DestroyWindow or PostQuitMessage function when the session is ending.
т.е. этого делать не надо. Убери эту строку
> {в онкреат зануляю этот самый трм}
уже не проблема, но тоже незачем.
он и так нуль, а для наглядности можно дописать.
var
Trm:byte = 0;
denkop (2004-08-03 02:08:00) [4]Ещё забыл. При первой попытке выклбчить компьютер завершается только моя программа. После второй попытки всё остальное. Замучался по два раза шырять завершение работы.
Заранее благодарен за помощь.