Помимо формы-заставки нередко
в приложениях в начале работы появляется форма с запросом пароля. При
неверном пароле приложение закрывается, не позволяя пользователю
работать с ним.
Рассмотрим один из способов
реализации формы-заставки и формы запроса пароля:
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.ShowModal<>6) 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.ShowModal<>6)
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.
|