Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблемы с OnCloseQuery

12K
01 апреля 2006 года
AnD1
9 / / 23.12.2005
Доброго времени суток!
Помогите решить следующую проблему. В программе на событие 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);

Но это помогало лишь частично, т.к. еще оставался заголовок окна на панели, и можно было там "без проблем" закрыть прогу.
Ну, вроде все рассказал, как быть дальше??
1.8K
01 апреля 2006 года
LastSoul
279 / / 28.12.2005
Наверное лучше будет вместо этого:
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;
12K
01 апреля 2006 года
AnD1
9 / / 23.12.2005
Спасибо, то что нужно!!!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог