![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Корректное закрытие приложения ... [D7]
Asail © (2005-12-13 12:25:00)Здрасте!!!
Как можно корректно закрыть приложение, в случае, когда
открыто несколько форм (модальных)?
Грубо говоря, в определенный момент надо закрыть все, что было открыто из главной формы, а затем и саму главную форму.
Проблема в том, что таких модальных форм может быть много.
К тому-же могут оказаться в момент закрытия приложения
открытые диалоговые окна (OpenDlg, SaveDlg), message-боксы (типа ShowMessage), Preview отчетов...
Задача - корректно закрыть приложение, так, что-бы у каждой
открытой формы сработал OnClose (в обратной, относительно порядка открытия форм, последовательности).
Пардон за черезчур длинный вопрос.
Заранее, спасибо!
Васяня (2005-12-13 12:55:00) [21]Кхе...
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
frmA.Close();
frmB.Close();
frmC.Close();
frmD.Close();
Close();
end;
Это?
Если по каким-то причинам модальные формы не хотят умирать то ты их по темечку, перепиши процедупу закрытия, вернее воткни в нее Halt какой-нить и всЁ... аль я ни так опять чего понял?
Asail (2005-12-13 12:50:00) [22]Я, видимо, некорректно задал вопрос.
Нужно, при событии frmMain.OnClose, закрывалось все, что было открыто до сих пор.
Т.е. если последовательность открытия модальных форм такова:
frmMain -> frmA -> frmB -> frmC, то при frmMain.Close
надо закрыть все формы в обратной последовательности:
frmC.Close; frmB.Close; frmA.Close
и только потом окончательно убить frmMain...
Васяня (2005-12-13 12:36:00) [23]Чо за муть? зачем такой изврат? ну до ладно... может назначения для всех форм одного обработчика событий нас спасет?
Например, в главное форме делаем так:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ShowMessage('j');
end;
и в модальной форме так:
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form1.OnClose(Sender, Action);
end;
Теперь, это самое сложное определить Sender и тащиться от того что ты супер кодер :)