Свойство ModalResult определяет, какое значение будет содержать свойство ModalResult формы, когда форма закрывается после нажатия этой кнопки (см. рис. 63-12). Если требуется, чтобы пользователь мог щелкнуть на кнопке для закрытия формы, воспользуйтесь свойством ModalResult этой кнопки. На рисунке 63-13 были созданы различные кнопки, которые могут возвращать типичные значения ModalResult. ModalResult имеет тип TModalResult, который определяет диапазон возможных целочисленных значений. Некоторые из этих значений объявлены как именованные константы, приведенные в следующей таблице:Используйте эту константу ... Чтобы возвратить это значение ...
mrAbort idAbort
mrAII mrNo + 1
mrCancel idCancel
mrIgnore idIgnore
mrNo idNo
mrNone 0
mrOk idOK
mrRetry idRetry
mrYes idYes

    Если свойство ModalResult имеет ненулевое значение, нет необходимости явно вызывать метод Close формы в обработчике событий OnClick кнопки с целью закрытия формы. Если ModalResult — mrNone и данная кнопка должна закрывать форму, следует вызывать метод Close:
procedure TForm1.ButtonlClick(Sender: TObject);
begin
  Close;

end;

В этом случае свойство ModalResult формы будет содержать 0. Значение ModalResult по умолчанию — mrNone.

РИСУНОК 63-12. Кнопка, которая закрывает этот диалог, определена посредством свойства ModalResult

РИСУНОК 63-13. Этот модальный диалог может возвратить один из нескольких модальных результатов

Поведение модальной формы определяется свойством ModalResult. Это свойство доступно только во время выполнения приложения. При открытии формы методом ShowModal свойство ModalResult приобретает значение, равное нулю. Как только это свойство получит положительное значение – модальное окно будет закрыто.

Требуемое значение ModalResult можно задать программно в обработчиках событий для компонентов модальной формы. Однако проще воспользоваться свойством ModalResult кнопок Button и BitBtn. В кнопках BitBtn это свойство имеет значение, соответствующее назначению кнопки. Для кнопки Button свойству ModalResult можно задать нужное значение. При использовании кнопки для закрытия окна её свойство ModalResult определяет, какое значение будет иметь одноимённое свойство формы.

Для облегчения трактовки результата в Delphi объявлены именованные константы (смотри таблицу). Чаще требуемые значения свойства ModalResult для кнопок задаются на этапе проектирования. Однако в некоторых случаях целесообразно установить значения во время работы приложения. Например, чтобы запретить закрытие модального окна.Число Константа Значение Примечание
0 mrNone
1 mrOk idOk Закрытие кнопкой OK
2 mrCancel idCancel Закрытие кнопкой Cancel или методом Close или кнопкой в строке заголовка окна
3 mrAbort idAbort Закрытие кнопкой Abort
4 mrRetry idRetry Закрытие кнопкой Retry
5 mrIgnor idIgnor Закрытие кнопкой Ignor
6 mrYes idYes Закрытие кнопкой Yes
7 mrNo idNo Закрытие кнопкой No
8 mrAll mrNo+1 Закрытие кнопкой All
9 mrNoToAll mrAll+1 Закрытие кнопкой NoToAll
10 mrYesToAll NoToAll+1 Закрытие кнопкой YesToAll

При закрытии модального окна функция ShowModal возвращает значение свойства ModalResult. Таким образом, для оценки действия пользователя можно прочитать значение свойства формы ModalResult или воспользоваться результатом, возвращаемым функцией ShowModal.

При разработке приложения следует учитывать, что закрытию формы методом Close соответствует значение mrCancel свойства ModalResult. Скрытие формы методом Hide не изменяет значения ModalResult.

Последовательность действий при создании окна диалога:
создать новую форму, присвоить ей имя (например, MyDlg), задать значения свойств и сохранить в файле;
используя команду File|Use Unit, связать с нужной формой приложения;
в обработчик события для пункта меню или кнопки включить команду, выводящую окно на экран: MyDlg.ShowModal;
проанализировать результат диалога. Например, применить конструкцию

if MyDlg.ModalResult=mrOk then <операторы> else <операторы>;

Альтернативный вариант предполагает совмещение пунктов 3 и 4 путём использования конструкции:

if MyDlg.ShowModal then <операторы> else <операторы>;

Метод ShowModal выводит на экран модальное окно, а при его закрытии возвращает результат диалога.

if MyDlg.ShowModal=mrOk
then begin
label1.Caption:=MyDlg.Edit1.Text;
label2.Caption:=MyDlg.Edit2.Text;
end
else begin
MyDlg.Edit1.Text:=st1;
MyDlg.Edit2.Text:=st2;
end;

Следующий пример иллюстрирует анализ свойства ModalResult при использовании функции MessageDlg. Для задания цвета применяется стандартное окно ColorDialog, а PrintDialog позволяет организовать печать.

procedure TForm1.MenuScrClick(Sender: TObject);
var res:TModalResult;
begin
if ColorDialog2.Color<> clWhite then
begin
res:=MessageDlg('Цвет фона - не белый'+
#10#13'Исправить автоматически - Yes'+
#10#13'Продолжить - OK'+
#10#13'Отменить печать - Cancel',
mtWarning,[mbYes,mbok,mbCancel],0); if res=mrYes then ColorDialog2.Color:=clWhite;
if res=mrCancel then exit;
end;
if PrintDialog1.execute then
begin
< операторы вывода на печать >
end;
end;