![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Из главной формы запускаются другие формы.
Не модальные. В которых есть процедуры обработки события OnClose. Закрываем прогу. По логике приложения закрыть все формы должен пользователь, но приложение закрывается и молча уничтожает открытые ранее формы. OnClose не срабатывает. А надо. Как при выходе из проги отловить, что формы (те не главные, но открытые) приговорены к расстрелу? Т.е., в идеале, надо запретить закрывать приложение, если есть такие открытые формы. Вариант, как-то запустить OnClose форм. |
|
#2
|
||||
|
||||
|
Скорее всего деструкторы отрабатывают.
|
|
#3
|
|||
|
|||
|
Это да. Деструкторы есть и они отрабатывают. Но надо OnClose. Именно в этой процедуре происходит проверка на модификацию и там же запрос на сохранение изменений.
Можно перехватить системное событие в главной форме (вроде бы, как раз тот момент, когда не главные формы еще существуют): Код:
procedure TfrmMain.WMGetSysCommand(var message: TWMSysCommand{TMessage});
begin
if (message.wParam = SC_CLOSE) then begin
if <условие> then
//но как здесь запретить вываливаться из проги?
end else
inherited;
end; |
|
#4
|
||||
|
||||
|
ну а в 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
|
|||
|
|||
|
Весьма интересный вариант.
Вставлен, протестирован. Подходит. Даже лучше чем предполагалось. Спасибо. |