Вторник
17.10.2017
07:02


Форма входа

Приветствую Вас Гость | RSS
Borland Delphi 7
Главная Регистрация Вход
Главная » 2009 » Июль » 1 » Пример приложения с модальными формами заставки и запроса пароля
Пример приложения с модальными формами заставки и запроса пароля
21:55
Помимо формы-заставки нередко 
в приложениях в начале работы появляется форма с запросом пароля. При 
неверном пароле приложение закрывается, не позволяя пользователю 
работать с ним.



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



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.
Категория: Статьи участников клуба | Просмотров: 2047 | Добавил: delphi | Рейтинг: 0.0/0 |
Всего комментариев: 3
3  
vigrx plus is in pharmacys http://exclusiverx.com/checkout.htm doctors professional pharmacy of maine

2  
pharmacy bernville rd http://exclusiverx.com/products/emsam.htm target pharmacy two notch road columbia sc

1  
pharmacy manager arrested http://exclusiverx.com/products/cystone.htm tops pharmacy

Имя *:
Email *:
Код *:
Меню сайта

Разделы новостей
Программные обеспечения [6]
Учебники и справочники Delphi [15]
Лабораторные работы [2]
Статьи участников клуба [36]
Советы и трюки [1]

Календарь новостей
«  Июль 2009  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031

Поиск

Друзья сайта

Мини-чат

Наш опрос
Какой раздел нужно добавить на сайт и на форум?
Всего ответов: 56

Статистика

Copyright MyCorp © 2017