288______________________________________________Глава 4

ние программы в модуле UMain останавливается до тех пор, пока модальная фор-
ма не будет закрыта. После закрытия модальной формы выполнение программы
'    продолжится и главная форма станет видимой.

Можете сохранить проект, запустить приложение и убедиться, что все работа-
ет правильно.

Теперь добавим в приложение форму запроса пароля. Реальная форма такого
типа должна предлагать пользователю ввести свое имя и пароль, сравнивать вве-
денные значения с образцами, хранящимися где-то в системе, при неправильном
пароле давать возможность пользователю поправиться. Если пользователь так и не
может ввести правильный пароль, форма должна закрыть приложение, не допус-
тив к нему пользователя. При правильном пароле после закрытия формы запроса
должна открыться главная форма приложения. Все это не трудно сделать, но мы
упростим задачу, чтобы не отвлекаться от главного — взаимодействия форм в при-
ложении. Будем использовать всего один пароль, который непосредственно ука-
жем в соответствующем операторе программы. И не будем давать пользователю
возможности исправить введенный пароль.

8. Добавьте к приложению новую форму. Назовите ее FPSW и сохраните ее мо-
дуль в файле с именем UPSW. Уменьшите размер формы до разумных преде-
лов, поскольку она будет содержать всего одно окно редактирования. Устано-
вите свойство формы BorderStyle равным bsDialog, свойство Position равным
poScreenCenter. В свойстве Caption напишите «Введите пароль и нажмите En-
ter». Эта надпись будет служить приглашением пользователю.

9. Поместите в центре формы окно редактирования Edit, в котором пользователь
будет вводить пароль. Очистите его свойство Text. В обработчике события Оп-
KeyDown этого компонента запишите оператор:

if (Key == VK_RETURN) Closet);

Этот оператор анализирует нажатую клавишу (подробнее об этом смотрите в
разделе 4.3.2.2). Если нажата клавиша Enter, то считается, что пользователь завер-
шил ввод пароля, и форма закрывается. Анализ введенного пароля откладывается
до события OnClose. Дело в том, что, несмотря на приглашение в заголовке окна
нажать после ввода пароля Enter, пользователь может проигнорировать это и за-
крыть окно, например, системной кнопкой. Если он до этого ввел правильный па-
роль, то несправедливо не проверить его, наказывая таким образом пользователя
за непослушание. Вообще, если вы хотите создать для пользователя дружествен-
ный интерфейс, поменьше диктуйте ему последовательность действий. Лучше ис-
ходите из правила: «Пользователь всегда прав». И старайтесь предусмотреть реак-
цию на его самые неразумные (с вашей точки зрения) действия.

10. В обработчике события OnClose формы FPSW напишите оператор

if (Editl->Text == "I") ModalResult = 6;

Этот оператор сличает введенный текст с паролем. В данном операторе для
упрощения непосредственно указан правильный пароль — символ "Г. Если введен
правильный пароль, то свойству ModalResult присваивается некоторое условное
число — б (можно было бы выбрать и любое другое допустимое число, кроме 0 и 2).
Если пароль неправильный, то оставляется значение ModalResult = 2 (mrCancel),
которое автоматически присваивается при любой попытке закрыть форму. В обоих
случаях форма закрывается, так как задание отличного от нуля положительного
значения ModalResult равносильно закрытию формы. Но при правильном пароле
значение ModalResult будет равно 6, а при неправильном — 2.

На этом проектирование формы запроса пароля закончено. Теперь запишем в
модуле главной формы UMain оператор, показывающий пользователю эту форму и
анализирующий ответ пользователя. Для этого надо выполнить следующие опера-
ции.