Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.07.2012, 07:03
Vocabulary Vocabulary вне форума
Новичок
 
Регистрация: 17.09.2009
Сообщения: 85
Репутация: 9
По умолчанию Прилжение закрывается, а OnClose формы не срабатывает

Из главной формы запускаются другие формы.
Не модальные. В которых есть процедуры обработки события OnClose.

Закрываем прогу.
По логике приложения закрыть все формы должен пользователь,
но приложение закрывается и молча уничтожает открытые ранее формы.
OnClose не срабатывает. А надо.

Как при выходе из проги отловить, что формы (те не главные, но открытые) приговорены к расстрелу?
Т.е., в идеале, надо запретить закрывать приложение, если есть такие открытые формы.
Вариант, как-то запустить OnClose форм.
Ответить с цитированием
  #2  
Старый 23.07.2012, 07:51
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Скорее всего деструкторы отрабатывают.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #3  
Старый 23.07.2012, 08:15
Vocabulary Vocabulary вне форума
Новичок
 
Регистрация: 17.09.2009
Сообщения: 85
Репутация: 9
По умолчанию

Это да. Деструкторы есть и они отрабатывают. Но надо OnClose. Именно в этой процедуре происходит проверка на модификацию и там же запрос на сохранение изменений.

Можно перехватить системное событие в главной форме (вроде бы, как раз тот момент, когда не главные формы еще существуют):
Код:
procedure TfrmMain.WMGetSysCommand(var message: TWMSysCommand{TMessage});
begin
  if (message.wParam = SC_CLOSE) then begin
    if <условие> then
      //но как здесь запретить вываливаться из проги?
  end else
    inherited;
end;
Ответить с цитированием
  #4  
Старый 23.07.2012, 09:40
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
Вопрос

ну а в OnClose главной формы прописать:
Код:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
  i: Integer;
begin
  for i:=0 to Screen.FormCount-1 do
    if (Screen.Forms[i]<>Self) and (Screen.Forms[i].Visible) then
      Screen.Forms[i].Close;
end;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Этот пользователь сказал Спасибо NumLock за это полезное сообщение:
Vocabulary (23.07.2012)
  #5  
Старый 23.07.2012, 10:02
Vocabulary Vocabulary вне форума
Новичок
 
Регистрация: 17.09.2009
Сообщения: 85
Репутация: 9
По умолчанию

Весьма интересный вариант.
Вставлен, протестирован. Подходит. Даже лучше чем предполагалось.
Спасибо.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:05.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter