1  Проектирование графического интерфейса пользователя______________287

KeyDown и напишите для него обработчик, состоящий из одного оператора —
Close(). Аналогичный обработчик напишите для события onMouseDown. Если
на форме у вас имеются метки, компоненты Image и др., то выделите их все,
|      задайте в событии onMouseDown ссылку на тот же обработчик, что вы сделали
для формы, а в форме поставьте свойство KeyPreview в true, чтобы форма пе-
рехватывала все связанные с нажатием клавиш события компонентов.

Теперь форма будет закрываться при нажатии пользователем любой клавиши
или кнопки мыши. Давайте сделаем так, чтобы и при отсутствии каких-то дейст-
вий со стороны пользователя форма закрывалась сама, например, через 5 секунд.

4. Добавьте на форму компонент Timer со страницы System. Это невизуальный
компонент, который может отсчитывать интервалы времени (см. раз-
дел 3.3.7). Интервал задается в свойстве компонента Interval в миллисекун-
дах. Задайте его равным 5000. Единственное событие таймера — onTimer, на-
ступающее по истечении заданного интервала времени. Напишите в обработ-
чике этого события все тот же единственный оператор CloseQ.

Теперь при любом действии и даже бездействии пользователя форма-заставка
будет закрываться. Но что это означает? По умолчанию закрыть форму значит сде-
лать ее невидимой. Однако, форма-заставка не нужна после того, как она будет
предъявлена пользователю в первый момент выполнения приложения. Хранить
все время в памяти эту уже ненужную форму не имеет смысла. Поэтому в форме
надо предусмотреть, чтобы закрытие формы означало ее удаление из памяти и
освобождение памяти для чего-нибудь более полезного. Для этого надо сделать сле-
дующее.

5. В событие формы OnClose вставьте оператор:

Action = caFree;

Как указывалось в предыдущих разделах, этот оператор приводит к уничто-
жению объекта формы и освобождению занимаемой формой памяти.

Форма-заставка готова к использованию. Проверьте только, имеет ли ее свой-
ство Visible значение false. Это важно, поскольку только невидимую форму можно
открыть методом ShowModal. В главной форме свойство Visible тоже должно
иметь значение false.

Теперь можно записать в главной форме оператор ShowModal. Но чтобы это
можно было сделать, необходимо сослаться в модуле Umain на модуль UFLog.

6. Сохраните проект, дав файлу модуля главной формы имя UMain, а файлу мо-
дуля формы-заставки имя UFLog. Добавьте в модуль UMain директиву ком-
пилятора #include "UFLog.h" или выполните для модуля UMain команду File
I      Include Unit Hdr и укажите в диалоге имя включаемого модуля UFLog.

Сохранение необходимо сделать, чтобы модули обрели свои окончательные
имена. Иначе если вы сделаете ссылку, пока модули имеют имена по умолчанию
L  (Uniti и Unit2), а потом при сохранении дадите им более осмысленные имена (это
всегда желательно делать), то прежние ссылки на модули окажутся неверными и
вам придется их переделывать.

Теперь осталось написать в модуле UMain обработчик события формы OnShow.

7. Напишите в модуле UMain обработчик события формы OnShow, состоящий из
одного оператора:

/
FLog->ShowModal() ;

Событие OnShow наступает перед тем, как форма становится видимой. Поэто-
му в момент выполнения указанного оператора она еще не видна. Оператор откры-
•  вает форму FLog как модальную, передает ей управление и дальнейшее выполне-