Проблемы с OnCloseQuery
Помогите решить следующую проблему. В программе на событие FormCloseQuery отрабатывает такой код:
procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if Application.MessageBox('Вы действительно хотите выйти?', 'Подтверждение выхода',
MB_OKCANCEL+MB_DEFBUTTON1+MB_ICONINFORMATION)=IDOK then
begin
//некоторые действия
CanClose:=True;
end
else
CanClose:=False;
end;
Т.е. при выходе из проги, она спрашивает подтверждение на выход. Все работает отлично, но при выключении (перезагрузке) компа прога "выплёвывает" это сообщение, с виндой то всё в порядке она нормально выключается, но вот сам факт... :(
Как можно, оставив прежний функционал, избавиться от проблемы, т.к. очень важно чтобы программу не закрыли случайно. Еще пробовал убирать кнопки из заголовка окна, и "делал свою кнопочку для закрытия":
Style: Longint;
...
Style:=GetWindowLong(Handle, GWL_STYLE);
SetWindowLong(Handle, GWL_STYLE, Style And Not WS_SYSMENU);
Но это помогало лишь частично, т.к. еще оставался заголовок окна на панели, и можно было там "без проблем" закрыть прогу.
Ну, вроде все рассказал, как быть дальше??
Style: Longint;
...
Style:=GetWindowLong(Handle, GWL_STYLE);
SetWindowLong(Handle, GWL_STYLE, Style And Not WS_SYSMENU);
сделать так:
В ObjectInspector, Form > BorderIcons > biSystemMenu поставить в false
Убирает из панели:
SetWindowLong(Application.Handle,GWL_EXSTYLE,GetWindowLong(Application.Handle,GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
в файл .dpr и помоему обязательно после строки:
Application.Initialize;
и в этом же файле в uses добавь Windows
Если важно чтобы программу не закрыли случайно
можно попробовать вот так:
n:Integer;
n:=MessageDlg('Выйти?',mtWarning,[mbYes,mbNo],0);
If n=6 Then Application.Terminate;
Спасибо, то что нужно!!!