Пример приложения с модальными формами заставки и запроса пароля
Во многих больших приложениях при их запуске сначала на экране появляется форма-заставка, содержащая логотип приложения и сведения о программе и ее разработчике. Назначение этой формы чаще всего заключается в том, чтобы обеспечить начальную загрузку и настройку программы. Тогда эта форма должна закрываться не раньше, чем закончатся эти операции. Но иногда эта форма носит чисто информационный характер. В этих случаях желательно, чтобы она немедленно закрывалась при любых действиях пользователя и даже закрывалась через какое-то время без каких-либо действий со стороны пользователя. Именно такую форму-заставку мы и попробуем создать.
Помимо формы-заставки нередко в приложениях, особенно в тех, которые работают с базами данных, в начале работы приложения появляется форма с запросом пароля. При неверном пароле приложение закрывается, не позволяя пользователю работать с ним.
Формы-заставки и формы запроса пароля могут быть реализованы множеством различных способов. Рассмотрим один из них.
1. Откройте в Delphi новое приложение (File New Application). Пусть открывшаяся форма будет главной в нашем приложении (вместо такой пустой формы вы можете взять любое разработанное вами ранее приложение и добавлять форму-заставку и форму запроса пароля в него).
Назовите для определенности главную форму приложения FMain.
2. Добавьте в приложение новую форму (File | New | Form). Пусть это будет ваша форма-заставка. Назовите ее FLog.
Ее свойство BorderStyle надо сделать равным bsNone, чтобы в окне этой формы отсутствовала полоса заголовка.
Вы можете поместить на форме какой-то рисунок (разместить компонент Image и вставить в его свойство Picture желаемый рисунок), надписи и т.п. В простейшем случае поместите в центре формы метку Label и напишите в ней какой-то текст.
Размер формы-заставки задайте небольшим, меньшим, чем обычные окна приложения.
Свойство Position следует сделать равным poScreenCenter, чтобы форма появлялась в центре экрана.
3. Теперь напишите обработчики событий, которые при любом действии пользователя закрывали бы форму.
procedure TFLog.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
close;
end;
Аналогичный обработчик напишите для события onMouseDown.
procedure TFLog.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Close;
end;
Если на форме у вас имеются метки, компоненты Image и др., то выделите их все, задайте в событии onMouseDown ссылку на тот же обработчик, что вы сделали для формы.
В форме поставьте свойство KeyPreview в true, чтобы форма перехватывала все связанные с нажатием клавиш события компонентов.
Теперь форма будет закрываться при нажатии пользователем любой клавиши или кнопки мыши.
Давайте сделаем так, чтобы и при отсутствии каких-то действий со стороны пользователя форма закрывалась сама, например, через 5 секунд.
4. Добавьте на форму компонент Timer со страницы System.
Интервал задается в свойстве компонента Interval в миллисекундах. Задайте его равным 5000.
Единственное событие таймера — onTimer, наступает по истечении заданного интервала времени. Напишите в обработчике этого события все тот же единственный оператор Close.
procedure TFLog.Timer1Timer(Sender: TObject);
begin
close;
end;
Теперь при любом действии и даже бездействии пользователя форма-заставка будет закрываться. Но что это означает? По умолчанию закрыть форму значит сделать ее невидимой. Однако форма-заставка не нужна после того, как она будет предъявлена пользователю в первый момент выполнения приложения. Хранить все время в памяти эту уже ненужную форму не имеет смысла. Поэтому в форме надо предусмотреть, чтобы закрытие формы означало ее удаление из памяти и освобождение памяти для чего-нибудь более полезного. Для этого надо сделать следующее.
