Пример приложения с модальными формами заставки и запроса пароля Delphi

Помимо формы-заставки нередко
в приложениях в начале работы появляется форма с запросом пароля. При
неверном пароле приложение закрывается, не позволяя пользователю
работать с ним.

Рассмотрим один из способов
реализации формы-заставки и формы запроса пароля:

1. Откройте новое приложение (File|New Application). Это
будет главная форма. Свойству Name присвоим –
Fmain.

2. Добавьте новую форму (File|New form). Это будет
форма-заставка. Name – Flog. Ее свойство BorderStyle надо
сделать равным bsNone(4.1.3), чтобы в окне этой формы отсутствовала полоса
заголовка. Поместите на форме рисунки, надписи и т.п. Свойство
Position следует сделать равным poScreenCenter, чтобы форма
появлялась в центре экрана.

3. Написать обработчики событий, которые при любом
действии пользователя закрывали бы форму.
Щелкнуть на форме, чтобы в
Инспекторе объектов открылись относящиеся к ней страницы (если форма
закрыта панелями и т.п., нажимайте клавишу ESC). Перейти на страницу
Events инспектора объектов, выбрать событие onKeyDown и
написать обработчик, состоящий из одного оператора – Close.
Аналогично – для onMouseDown. Если на форме имеются метки,
компоненты Image и др., то выделить из все, задать в событии
onMouseDown ссылку на тот же обработчик, что и для формы, а в форме
поставить свойство KeyPreview в true, чтобы форма
перехватывала все связанные с нажатием клавиш события
компонентов.

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

4. Чтобы и при отсутствии каких-то действий со стороны
пользователя форма закрывалась сама, например , через 5 секунд, добавим на
форму компонент Timer со страницы System. Это невизуальный
компонент, который может отсчитывать интервалы времени. Интервал задается
в свойстве компонента Interval в миллисекундах – 5000. Единственное
событие таймера onTimer, наступающее по истечении заданного
интервала времени. Написать в обработчике этого события –
Close.

Теперь при любом действии или бездействии пользователя
форма заставка будет закрываться.

5. Чтобы удалить ненужную форму из памяти надо в событие
формы onClose вставить оператор:

Action:=caFree;

Форма-заставка готова к использованию (проверить свойства
Visible=true у форм). Сохранить проект, дав файлу модуля главной
формы имя Umain, а файлу модуля формы-заставки имя
Ulog.

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

6. Для этого можно выполнить команду File|Use Unit.
(или Delphi сделает это сама при попытке компиляции
приложения).

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

Flog. ShowModal;

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

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

Теперь добавим в приложение форму запроса пароля. Будем
использовать всего один пароль, который непосредственно укажем в
соответствующем операторе программы. И не будем давать пользователю
возможности исправить введенный пароль.

8. Добавить к приложению новую форму. Name – Fpsw и
сохранить ее модуль в файле – Upsw. Уменьшить размеры формы. Установить
свойство BorderStyle равным bsDialog, свойство Position равным
poScreenCenter, в свойстве Caption написать – «Введите пароль и нажмите
Enter».

9. Поместить в центре формы Edit1, в котором
пользователь будет вводить пароль, очистить свойство Text. В обработчике
события onKeyDown написать оператор:

if (key=VK_RETURN) then
begin
if
EPSW.Text=’я’
then ModalResult:=6
else Close;
end;

Этот оператор анализирует нажатую клавишу. Если нажата
клавиша Enter, то введенный текст сличается с паролем. В данном операторе
для упрощения непосредственно указан правильный пароль – символ ‘я’.

Если введен правильны пароль, то свойству ModalResult
присваивается некоторое условное число – 6 (можно выбрать и другое за
исключением 0 и 2). Если пароль неправильный, то выполняется метод Close.
В обоих случаях форма закрывается, так как задание отличного от 0
положительного значения ModalResult равносильно закрытию формы. При
правильном пароле – ModalResult=6, а при неправильном –
ModalResult=2

Теперь необходимо сослаться в модуле Umain на
модуль Upsw.

10. Для этого можно выполнить команду File|Use
Unit. (или Delphi сделает это сама при попытке компиляции
приложения), а в обработчике события onShow после оператора Flog.
ShowModal добавить оператор:

if (Fpsw.ShowModal6)
then
Close
else
begin
ShowMessage(‘Ваш пароль
‘+Fpsw.EPSW.Text);
Fpsw.Free; //уничтожение формы пароля
запроса
end;

end;

То же самое можно было бы сделать и проще. В обработчике
события onKeyDown окна редактирование на форме FPSW можно было бы написать
более простой оператор:

if (key=VK_RETURN)and(EPSW.Text’a’)
then

Application/Terminate;

И операторы в главной форме тоже упрощаются:

Fpsw.ShowModal;
ShowMessage(‘Ваш пароль
‘+Fpsw.EPSW.Text);
Fpsw.Free;

unit Umain;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs;

type
TFMain = class(TForm)
procedure
FormShow(Sender: TObject);
private
{ Private declarations
}
public
{ Public declarations }
end;

var
FMain: TFMain;

implementation

uses Ulog, Upsw;

{$R *.DFM}

procedure TFMain.FormShow(Sender: TObject);

begin

Flog.ShowModal;

if (Fpsw.ShowModal6)

then Close
else
begin
ShowMessage(‘Ваш пароль
‘+Fpsw.EPSW.Text);
Fpsw.Free;
end;

end;

end.

unit Ulog;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs,
StdCtrls;

type
TFLog = class(TForm)
Label1:
TLabel;
procedure FormMouseDown(Sender: TObject; Button:
TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure
FormClose(Sender: TObject; var Action: TCloseAction);
private
{
Private declarations }
public
{ Public declarations
}
end;

var
FLog: TFLog;

implementation

{$R *.DFM}

procedure TFLog.FormMouseDown(Sender: TObject; Button:
TMouseButton;
Shift: TShiftState; X, Y: Integer);

begin

Close;

end;

procedure TFLog.FormClose(Sender: TObject; var Action:
TCloseAction);

begin

Action:=caFree;

end;

end.

unit Upsw;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs,
StdCtrls;

type
TFPSW = class(TForm)
Epsw: TEdit;
procedure
EpswKeyDown(Sender: TObject; var Key: Word;
Shift:
TShiftState);
private
{ Private declarations }
public
{ Public
declarations }
end;

var
FPSW: TFPSW;

implementation

{$R *.DFM}

procedure TFPSW.EpswKeyDown(Sender: TObject; var Key:
Word;
Shift: TShiftState);

begin

if (key=VK_RETURN) then
begin
if
EPSW.Text=’я’
then ModalResult:=6
else Close;
end;

end;

end.

Понравилась статья? Поделиться с друзьями: