![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | 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  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Весьма интересный вариант.  
		
	
		
		
		
		
		
	
		
		
	
	
	Вставлен, протестирован. Подходит. Даже лучше чем предполагалось. Спасибо.  |