Страница 9 из 42
Закрытие формы Для закрытия формы необходимо, чтобы он вернул True. Этот метод — прямой аналог метода CanClose в библиотеке OWL. Для проверки на возможность закрытия он вызывает обработчик события: (Pb) property OnCloseQuery: TCloseQueryEvent; TCloseQueryEvent = procedure(Sender: TObject; var CanClose: Boolean) of object; Здесь вы должны проверить возможность закрытия формы и вернуть нужное значение в параметре CanClose (который изначально имеет значение True). Например: procedure TForm2.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin if Memo 1.Modified then case MessageDlgf' Save text?', mtWarning, mbYesNoCancel, 0) of mrYes: Memol.Lines.SaveToFile('MYTEXT.TXT ') ; mrCancel: CanClose := False; end; end; Таким образом, если обработчик события OnCloseQuery не описан, возвращается True (форму можно закрыть). Для форм стиля fsMDIForm (родительских окон MDI) сначала должны закрываться все дочерние формы (вызываются их методы CloseQuery). Если хотя бы одна из них возвращает False, метод тут же возвращает False, и обработчик события OnCloseQuery закрываемой родительской формы управления не получает. Затем метод Close вызывает обработчик следующего события (Pb) property OnClose: TCloseEvent; TCloseEvent = procedure(Sender: TObject; var Action : TCloseAction) of object; TCloseAction = (caNone, caHide, caFree, caMinimize); что позволяет определить дальнейшую реакцию. Дело в том, что закрытие можно реализовать различными способами, в зависимости от значения параметра Action: caNone — не делать ничего; caHide — сделать форму невидимой (скрыть); caMinimize — свернуть форму в значок; caFree — уничтожить форму, вызвав ее деструктор. Перед вызовом OnClose в параметр Action засылается значение caHide. Исключение составляют дочерние формы MDI, для которых засылается значение caMinimize или caNone в зависимости от возможности их сворачивания. Если обработчик вернул значение caNone, форма не закрывается. Таким путем можно продублировать OnCloseQuery. При закрытии главной формы приложения любое отличное от caNone значение вызывает завершение приложения. Для формы, не являющейся главной, значения caHide и caMinimize позволяют соответственно скрыть и свернуть ее в значок. Выбор значения caFree влечет за собой вызов деструктора путем обращения к методу: procedure Release; Последним при уничтожении формы инициализируется событие: (Pb) property OnDestroy: TNotifyEvent; Это событие является парным по отношению к OnCreate; обработчик его вызывается в деструкторе формы. Здесь программист может предумотреть необходимые действия при уничтожении формы, к примеру, записать значения в файл JNI. |