6 Модальные формы
Открытие форм как модальных используется в большинстве диалоговых окон. Модальная форма приостанавливает выполнение вызвавшей ее процедуры до тех пор, пока пользователь не закроет эту форму. Модальная форма не позволяет также пользователю переключить фокус курсором мыши на другие формы данного приложения, пока форма не будет закрыта. Т.е. пользователь должен выполнить предложенные ему действия прежде, чем продолжить работу.
Модальной может быть сделана любая форма, если она делается видимой методом ShowModal. Если та же самая форма делается видимой методом Show, то она не будет модальной.
Поведение модальной формы определяется ее основным свойством ModalResult. Это свойство доступно только во время выполнения приложения. При открытии формы методом ShowModal сначала свойство ModalResult равно нулю. Как только при обработке каких-то событий на форме свойству ModalResult будет присвоено положительное значение, модальная форма закроется. А значение ее свойства ModalResult можно будет прочитать как результат, возвращаемый методом ShowModal. Таким образом, программа, вызвавшая модальную форму, может узнать, что сделал пользователь, работая с этой формой, например, на какой кнопке он щелкнул.
В Delphi предопределены некоторые константы, облегчающие трактовку результатов, полученных при закрытии модальной формы:
Численное значение ModalResult |
Константа |
Пояснение |
|
0 |
mrNone |
|
|
1 |
mrOk или idOK |
Закрытие модальной формы нажатием кнопки ОК |
|
2 |
mrCancel или idCancel |
Закрытие модальной формы нажатием кнопки Cancel, или методом Close, или нажатием .кнопки системного меню в полосе заголовка окна |
|
3 |
mr Abort или idAbort |
Закрытие модальной формы нажатием кнопки Abort |
|
4 |
mrRetry или idRetry |
Закрытие модальной формы нажатием кнопки Retry |
|
5 |
mrlgnore или idlgnore |
Закрытие модальной формы нажатием кнопки Ignore |
|
|
mrYes или idYes |
Закрытие модальной формы нажатием кнопки Yes |
|
7 |
mrNo или idNo |
Закрытие модальной формы нажатием кнопки No |
|
8 |
mrAll |
Закрытие модальной формы нажатием кнопки All |
|
9 |
mrNoToAll |
Закрытие модальной формы нажатием кнопки NoТоAll |
|
10 |
mrYesToAll |
Закрытие модальной формы нажатием кнопки YesToAll
|
Все приведенные выше пояснения значений ModalResult (кроме значений О и 2) носят чисто условный характер. В своем приложении вы вольны трактовать ту или иную величину ModalResult и соответствующие константы как вам угодно.
Требуемые значения ModalResult можно задавать в обработчиках соответствующих событий в компонентах модальной формы. Однако при использовании кнопок можно обойтись и без подобных обработчиков. Дело в том, что кнопки типа TButton и TBitBtn имеют свойство ModalResult, по умолчанию равное mrNone. Для кнопок, расположенных на модальной форме, значение этого свойства можно изменить и тогда не потребуется вводить каких-либо обработчиков событий при щелчке на них. В кнопках BitBtn при свойстве Kind, не равном bkCustom, заложены по умолчанию значения ModalResult, соответствующие назначению той или иной кнопки.