Консультация № 176871
23.02.2010, 23:16
0.00 руб.
0 12 1
Здравствуйте уважаемые эксперты!
Нуждаюсь в вашей помощи в среде Днльфи!
Нужно создать программу проверки пароля ограничение на число неудачных попыток ввода (например, 3). Если пользователь исчерпает этот лимит, программа заблокируется на какое-то время и прекратит обслуживание пользователя.
Используя такие компоненты: TLabel, TEdit, TButton, TGroupBox.
и если можно с коментариями!
Заранее большое спасибо!!!!

Обсуждение

давно
Профессионал
153662
1070
24.02.2010, 08:12
общий
Андреев Дмитрий Фёдорович:
Уточните, пароль должен вводится при запуске программы или по нажатию на какую-нибудь кнопку уже запущенной программы, программа должна полностью заблокироваться и не отзываться ни на что.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Неизвестный
24.02.2010, 10:26
общий
Андреев Дмитрий Фёдорович:
А сюда смотрели?
File - New - Other... - Dialogs - Password Dialog
Неизвестный
24.02.2010, 13:08
общий
Судя по статусу и вопросу автора то нужно просто в глобальной переменной (например PassCounts : byte;) считать неправильные входы, если более n раз, то блокировать окно входа и запускать таймер (TTimer) разблокировки.
Неизвестный
24.02.2010, 16:32
общий
Евгений/Genia007/,
ну вот программа запустилась там поле вводв пароля и кнопка(ОК к приммеру), там вводиться некое колличество раз пароль, в данном случае не правильный пароль, ввели 3 раза - неправильно, и программа блокируется на какое то время!

Patriotix-N,
а это тут причём???

Неизвестный
24.02.2010, 16:45
общий
Андреев Дмитрий Фёдорович:
Это поле ввода пароля Готовое... вам останется только добавить проверку на количество неудачных попыток.
давно
Профессионал
153662
1070
24.02.2010, 16:58
общий
Андреев Дмитрий Фёдорович:
Ну тогда что то вроде этого
Код:
unit Unit3;

interface

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

type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
i: word;

implementation

{$R *.dfm}

function Pass(ss: String): string; // Функция шифровки пароля
var
i: integer;
s: String[255];
c: array[0..255] of Byte absolute s;
begin
s:= ss;
for i:= 1 to Ord(s[0]) do
c[i]:= 23 xor c[i];
{for i := 1 to Length(s) do
s[i] := Char(23 xor Ord(c[i]));}
result:= s;
end;



procedure TForm1.Button1Click(Sender: TObject);
begin
if Edit1.Text <> Pass('&%$') then
begin // Неправильный пароль
Messagedlg('Введённый пароль не правильный, попробуйте ввести пароль ещё раз.', mtError, [mbOk], 0);
inc(i);
if i >= 3 then
Sleep(10000); // Останавливаем программу на 10 сек
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
i:= 0;
end;

end.
Напишите результат. Пароль 123.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Неизвестный
24.02.2010, 17:04
общий
Евгений/Genia007/,
а можно исходник?)
давно
Профессионал
153662
1070
24.02.2010, 17:12
общий
Андреев Дмитрий Фёдорович:
Если Вас это устраивает, оформлю ответ и приложу исходник прога.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Неизвестный
24.02.2010, 17:19
общий
Евгений/Genia007/,
устроит)
ну можно со всеми файлами если что пределать в коде можно было!
и при верном ведение пароля можно что бы высвечивалось что пароль верный!)
давно
Профессионал
153662
1070
24.02.2010, 17:37
общий
это ответ
Здравствуйте, Андреев Дмитрий Фёдорович.
Вот программа, которая Вам нужна. Пароль 123.
Код:
unit Unit3;

interface

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

type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
i: word;

implementation

{$R *.dfm}

function Pass(ss: String): string; // Функция шифровки пароля
var
i: integer;
s: String[255];
c: array[0..255] of Byte absolute s;
begin
s:= ss;
for i:= 1 to Ord(s[0]) do
c[i]:= 23 xor c[i];
// Строки для получения закодированного пароля
// Закомментировываем предыдущий цикл
// Раскомментируем этот
// и вводим в поле ввода нужный пароль на выходе
// в строке result:= s; получаем закодированный
{for i := 1 to Length(s) do
s[i] := Char(23 xor Ord(c[i]));}
//
result:= s;
end;



procedure TForm1.Button1Click(Sender: TObject);
begin
if Edit1.Text <> Pass('&%$') then
begin // Неправильный пароль
if i <> 2 then
Messagedlg('Введённый пароль не правильный ' + Inttostr(i + 1) + ' раз, попробуйте ввести пароль ещё раз.', mtError, [mbOk], 0)
else
Messagedlg('Введённый пароль не правильный ' + Inttostr(i + 1) + ' раз, программа будет заблокирована.', mtError, [mbOk], 0);
inc(i);
if i >= 3 then
Sleep(10000);
end
else
MessageDlg('Вы ввели правильный пароль', mtInformation, [mbok], 0);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
i:= 0;
end;

end.
Весь проект здесь
5
Спасибо!
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Неизвестный
24.02.2010, 19:02
общий
Цитата: 235545
и при верном ведение пароля можно что бы высвечивалось что пароль верный!)

Зачем подсвечивать если при верном пароле - грузится сама программа?
Если же нужно почитайте книгу по стандартным компонентам VCL.

Например можно сменить цвет фона компонента Edit:

Edit1.Color := clGreen;
Неизвестный
24.02.2010, 19:08
общий
в данном случае ни какая про8рамма не загружается!

за совет спасибо!
Форма ответа