В предыдущей статье мы создали немодальное окно для пункта меню Сохранить. Немного изменим вид окна, добавив на него строку ввода и две кнопки: Закрыть и Отмена (рис. 9.12).
Теперь посмотрим на очень интересное свойство кнопок— ModalResult. В этом свойстве можно задавать значение, возвращаемое при закрытии окна. Давайте выберем здесь mrok. Если теперь мы покажем окно как модальное и потом закроем его кнопкой Закрыть, то функция showModal вернет нам значение mrok.
Реально значения mrok и другие, которые вы можете увидеть в ниспадающем списке свойства ModalResult, — это числа, но для того, чтобы с ними удобно было работать, этим числам были поставлены в соответствие имена (константы). Первые две буквы mr — это сокращение от слова ModalResult. Остальное — это символьное представление результата. Получается, что, глядя на эту константу, мы можем сразу сказать, что она отображает нажатие кнопки ОК модального окна.
Мы еще добавили на форму кнопку Отмена. Для нее свойство ModalResult установим в mrCancel. Кстати, теперь вы должны очистить обработчики событий onclick для кнопок. Когда вы указали в свойстве ModalResult возвращаемое значение, кнопка уже автоматически умела закрывать окно и не нужно было создавать для нее обработчик onclick для того, чтобы написать в нем метод close. Это событие можно обрабатывать для других целей и даже можно написать этот метод, но это уже лишнее. Зачем делать то, что работает автоматически.
В связи с этим предлагаю изменить обработчик события onclick для пункта меню Сохранить:
begin
if NonModalForm.Shovyiodal=mrOK then
Application.MessageBox(PChar (NonModalForm.Editl.Text) , 'Ты ввел:’, MB_OKCANCEL)
end;
Теперь построчно рассмотрим код. В первой строке вызывается модальное окно и сразу проверяется возвращаемое значение. Если оно равно mrок, то выполняем следующее действие.
Вторая строка показывает стандартное окно диалога. Это делается с помощью метода MessageBox объекта Application. У метода три параметра:
- строка, которая будет показана внутри окна;
- строка заголовка окна;
- кнопки, которые будут на окне:
- мв_ок — кнопка ОК;
- мв_оксancel — кнопки ОК и Отмена;
- mb_retrycancel — кнопки Повторить и Отмена;
- mb_yesno — кнопки Да и Нет;
- mb_yesnocancel — кнопки Да, Нет и Отмена.
В качестве текста сообщения в окне выводится текст, введенный в строку ввода нашего модального окна (NonModalForm.Edit1.Text). Если вы не поняли, как получается этот текст, то еще раз посмотрите на эту строку. Вначале идет имя формы, потом имя компонента и интересующее свойство. Мы обращаемся к элементу управления другой формы, поэтому вначале просто необходимо указывать имя формы.
Теперь если пользователь нажмет в модальном окне кнопку Закрыть, то появится окно с введенным текстом. Иначе ничего не произойдет.