•  

ГлавнаяЛитература по DelphiРазработка приложений в системе Delphi → 6.3. Использование модального окна

Создано: 04.09.2010 4:49:50 · Исправлено: 04.09.2010 4:49:50 · Прочтений: 9911

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

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

Для облегчения трактовки результата в Delphi объявлены именованные константы (смотри таблицу). Чаще требуемые значения свойства ModalResult для кнопок задаются на этапе проектирования. Однако в некоторых случаях целесообразно установить значения во время работы приложения. Например, чтобы запретить закрытие модального окна.

ЧислоКонстантаЗначениеПримечание
0mrNone  
1mrOkidOkЗакрытие кнопкой OK
2mrCancelidCancelЗакрытие кнопкой Cancel или методом Close или кнопкой в строке заголовка окна
3mrAbortidAbortЗакрытие кнопкой Abort
4mrRetryidRetryЗакрытие кнопкой Retry
5mrIgnoridIgnorЗакрытие кнопкой Ignor
6mrYesidYesЗакрытие кнопкой Yes
7mrNoidNoЗакрытие кнопкой No
8mrAllmrNo+1Закрытие кнопкой All
9mrNoToAllmrAll+1Закрытие кнопкой NoToAll
10mrYesToAllNoToAll+1Закрытие кнопкой YesToAll

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

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

Последовательность действий при создании окна диалога:

  1. создать новую форму, присвоить ей имя (например, MyDlg), задать значения свойств и сохранить в файле;
  2. используя команду File|Use Unit, связать с нужной формой приложения;
  3. в обработчик события для пункта меню или кнопки включить команду, выводящую окно на экран: MyDlg.ShowModal;
  4. проанализировать результат диалога. Например, применить конструкцию
    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;