
Модальные формы 6 Модальные формы
Открытие форм как модальных используется в большинстве диалоговых окон. Модальная форма приостанавливает выполнение вызвавшей ее процедуры до тех пор, пока пользователь не закроет эту форму. Модальная форма не позволяет также пользователю переключить фокус курсором мыши на другие формы данного приложения, пока форма не будет закрыта. Т.е. пользователь должен выполнить предложенные ему действия прежде, чем продолжить работу.
Модальной может быть сделана любая форма, если она делается видимой методом ShowModal. Если та же самая форма делается видимой методом Show, то она не будет модальной.
Поведение модальной формы определяется ее основным свойством ModalResult. Это свойство доступно только во время выполнения приложения. При открытии формы методом ShowModal сначала свойство ModalResult равно нулю. Как только при обработке каких-то событий на форме свойству ModalResult будет присвоено положительное значение, модальная форма закроется.
Закрыть модальную форму можно вызовом метода close или заданием ненулевого значения ModalResult. В предложенном ниже примере модальная форма ModForm закрывается при нажатии клавиши мыши
procedure TModForm.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
close;
// или modalresult:=2;
end;
Значение свойства ModalResult можно будет прочитать как результат, возвращаемый методом ShowModal. Таким образом, программа, вызвавшая модальную форму, может узнать, как пользователь закрыл эту форму.
procedure TForm1.FormShow(Sender: TObject);
begin
if IntToStr(ModForm.ShowModal)=2 then …
end;
В Delphi предопределены некоторые константы, облегчающие трактовку результатов, полученных при закрытии модальной формы
Численное значение ModalResult |
Константа
|
Пояснение
|
0 |
mrNone |
используется как значение по умолчанию до выхода |
1 |
mrOk или idOK |
закрытие модальной формы нажатием кнопки OK |
2 |
mrCancel или idCancel
|
закрытие модальной формы нажатием кнопки Cancel, или методом Close, или нажатием кнопки системного меню в полосе заголовка окна |
3 |
mrAbort или idAbort |
закрытие модальной формы нажатием кнопки Abort |
4 |
mrRetry или idRetry |
закрытие модальной формы нажатием кнопки Retry |
5 |
mrIgnore или idIgnore |
закрытие модальной формы нажатием кнопки Ignore |
6 |
mrYes или idYes |
закрытие модальной формы нажатием кнопки Yes |
7 |
mrNo или idNo |
закрытие модальной формы нажатием кнопки No |
8 |
mrAll |
закрытие модальной формы нажатием кнопки All |
9 |
mrNoToAll |
закрытие кнопки модальной формы нажатием NoToAll |
10 |
mrYesToAll
|
закрытие модальной формы нажатием кнопки YesToAll |
Все приведенные выше пояснения значений ModalResult (кроме значений 0 и 2) носят чисто условный характер. В своем приложении вы вольны трактовать ту или иную величину ModalResult и соответствующие константы как вам угодно.
Требуемые значения ModalResult можно задавать в обработчиках соответствующих событий в компонентах модальной формы. Однако при использовании кнопок можно обойтись и без подобных обработчиков. Дело в том, что кнопки типа TButton и TBitBtn имеют свойство ModalResult, по умолчанию равное mrNone. Для кнопок, расположенных на модальной форме, значение этого свойства можно изменить и тогда не потребуется вводить каких-либо обработчиков событий при щелчке на них. В кнопках BitBtn при свойстве Kind, не равном bkCustom, заложены по умолчанию значения ModalResult, соответствующие назначению той или иной кнопки.