Техник
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
1

Программа с простым паролем на входе...

03.11.2009, 16:49. Показов 5752. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет. У меня вот такая задачка: необходимо на входе в программу поставить пароль, т.е. при запуске программы появляется окно с запросом пароля, если пароль верный выводится соответствующее сообщение, и запускается главная форма, если пароль не верный то выдается сообщение об ошибке, и предлагается ввести пароль заного. Если 5 раз ввести не верно, программа автоматически закрывается.

Проблема возникла на самом истоке, ее решения. После ввода не верного пароля выдается сообщение об ошибке, но после нажатия на "Ок" все равно отрывается главная форма.

Delphi
1
2
3
4
5
6
7
8
9
10
procedure TPasswordDlg.OKBtnClick(Sender: TObject);
Const pass='qwerty';
begin
 If Password.Text<>Pass then
 begin
  Password.Text:='';
  MessageDlg('Error',mtError, [mbOK], 0);
 end;
 end;
end.
Добавлено через 9 минут
Какое услови должно быть, чтобы после нажатия на "ОК" в сообщении, управление вернулось форме с паролем?

Добавлено через 15 минут
Вот второй вариант, более рабочий но с ошибками:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TPasswordDlg.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
var buttonSelected : Integer;
Const pass='qwerty';
begin
 If Password.Text<>Pass then
 begin
  Password.Text:='';
  buttonSelected := MessageDlg('Неверный пароль попробуйте еще раз',
                               mtError, [mbOK], 1);
  if buttonSelected = mrOK  then CanClose:=False;
 end else MessageDlg('Авторизация успешно пройдена.',mtInformation,
                     [mbOK], 1);
end;
В этом примере все работает так как надо за исключением того, что при нажатии на кнопке Cancel на форме или просто при попытке закрыть форму выдается сообщение - Неверный пароль, попробуйте еще раз.

Почему выдается знаю, но не знаю как исправить.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.11.2009, 16:49
Ответы с готовыми решениями:

Сообщение при входе в систему (проблема с паролем)
&lt; Сообщение при входе в систему Указаный домен не существует или к нему невозможно подключиться....

Программа с паролем
Здравствуйте не понял как выполнить задачу. Вводим пароль из 5 символов. Известно что в строке...

Программа с паролем
Нужно написать программус паролем.т.е,чтоб когда ты вводил в окошко пароль,если он не верный-...

Программа защищенная паролем
Написать программу с защитой с помощью пароля. Программа запрещает доступ пользователям которые...

9
247 / 205 / 26
Регистрация: 03.02.2009
Сообщений: 785
03.11.2009, 18:35 2
Попробуйте добавть close :

Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TPasswordDlg.OKBtnClick(Sender: TObject);
Const pass='qwerty';
begin
 If Password.Text<>Pass then
 begin
  Password.Text:='';
  MessageDlg('Error',mtError, [mbOK], 0);
  close;
 end;
end;
end.
0
19 / 19 / 3
Регистрация: 09.06.2009
Сообщений: 95
03.11.2009, 23:29 3
хм... помоему нужен цикл, если пас правельный выходим из цикла и открываем нужную форму, если нет - повторяем ввод пароля. А для количества попыток, можно установить флажок, типа k:=k+1. Проверять если k=5 пишем меседж и закрываем все к бабушке. Но это детская прога, для более профессиональной нужно пас в БД сохранить, чтоб была возможность изменять и контролировать пользователя. А саму БД шифровать.

Добавлено через 28 минут
или вот так
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
unit Unit2;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm2 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form2: TForm2;
  k:integer;
implementation
 
uses Unit1;
 
{$R *.dfm}
 
procedure TForm2.Button1Click(Sender: TObject);
 
 
 
 
  begin
 
   if edit1.Text='qwerty' then
     begin
       form1.Show;
       form2.Hide;
     end
    else
     ShowMessage('Пароль не верный!!!');
     k:=k+1;
     edit1.Text:='';
    if k=5 then begin
    ShowMessage('Вы исчерпали все свои попытки!!');
    close;
    form2.Close;
    form1.Close;
 
    end;
 
  end;
 
 
 
procedure TForm2.FormCreate(Sender: TObject);
begin
k:=1;
end;
 
end.
1
Техник
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
04.11.2009, 10:24  [ТС] 4
o-user, Так я уже пробывал, не помогает.

JUK, Пробывал сделать по вашему варианту, тоже не работает как хотелось бы.

Вот. мой вариант, готов на 90% , того что мне необходимо, единственная проблема осталась в том что, при правельном вводе пароля, не появляется главная форма. Не знаете почему? В чем может быть ошибка?

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm2.Button1Click(Sender: TObject);
const pass='qwerty';
begin
If Edit1.Text=pass then
 begin
 MessageDlg('Àâòîðèçàöèÿ óñïåøíî ïðîéäåíà.', mtInformation,[mbOK],2);
 Form2.Visible:=False;
 Form1.Visible:=true;
 end
else Begin
  MessageDlg('Íåâåðíûé ïàðîëü, ïîïðîáóéòå åùå ðàç.',mtError,[mbOK],2);
  Edit1.Text:='';
  Edit1.SetFocus;
  end;
end;
Добавлено через 22 минуты
При чем, если у кнопки Button1("ОК") - поменять значение ModalResult на - mrOK, то форма появляется, но тогда при вводе не верного пароля она все равно появляется.
0
247 / 205 / 26
Регистрация: 03.02.2009
Сообщений: 785
04.11.2009, 10:25 5
Предлагаю сделать такой вариант (все работает):

данный код помещаете на главной форме;
при вводе неверного пароля выводится сообщение и все закрывается;
если же пароль верный - то открывается следующая форма.
1
Техник
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
04.11.2009, 11:19  [ТС] 6
o-user, Так я делал изначально, но в задании требуется оповещение сообщениями, и без закрытия при неверном пароле.

Добавлено через 8 минут
Только что все получилось. Всем спасибо!

Добавлено через 19 минут
JUK, Пробывал по вашему примеру сделать цыкл, на количество раз, но ни чего не вышло, т.к. после первого ввода он сразу выдает все 5 сообщений о неверном пароле, и закрывается. Как сделать задержку, на проверку нового пароля?

Добавлено через 19 минут
Все. Теперь все полностью работает как надо на 100%. Нашел свою ошибку. Всем спасибо за оказаное внимание.
Вот код, который у меня получился:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
unit Unit2;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm2 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form2: TForm2;
   i:integer;
implementation
 uses Unit1;
{$R *.dfm}
 
procedure TForm2.Button1Click(Sender: TObject);
 
const pass='qwerty';
 
var MOK: Integer;
 
begin
 
If Edit1.Text=pass then
 begin
 Form2.Button1.ModalResult:=mrOk;
 MOK:= MessageDlg('Àâòîðèçàöèÿ óñïåøíî ïðîéäåíà.', mtInformation,[mbOK],2);
 If MOK=mrOk then
   begin
    Form2.Visible:=False;
    Form1.Visible:=true;
   end
 end
else Begin
  i:=i+1;
  MessageDlg('Íåâåðíûé ïàðîëü, ïîïðîáóéòå åùå ðàç.',mtError,[mbOK],2);
   Edit1.Text:='';
   If i=2 then
   begin
    ShowMessage('Îøèáêà. Ïðèëîæåíèå áóäåò çàêðûòî.');
    Application.Terminate;
   end else
    Edit1.SetFocus;
end;
 
end;
 
procedure TForm2.Button2Click(Sender: TObject);
begin
Application.Terminate;
end;
 
procedure TForm2.FormCreate(Sender: TObject);
begin
i:=0;
end;
 
end.
0
203 / 145 / 16
Регистрация: 13.01.2009
Сообщений: 554
04.11.2009, 11:28 7
pass.rar

Ловите, проверил, точно работает
0
FolDel
17.11.2009, 22:48 8
А кто нибудь может написать код похожий на этот но чтобы при следующем открытии программы не вводить пароль?
203 / 145 / 16
Регистрация: 13.01.2009
Сообщений: 554
17.11.2009, 23:13 9
можно, нужно хранить признак того, что программа уже успешно запускалась. Варианты
1 какой-нибудь ини файлик рядом с программой, недостаток, слишком легко крякается пользователем
2 в реестре, тоже не слишком сложно, но уже кое-что
3 можно вообще подменять ехешник, сделать 2 с паролем и без, потом, по принципу самораспаковывающегося архива подменить исходный файл куском с его конца....
0
Техник
318 / 176 / 27
Регистрация: 09.10.2009
Сообщений: 3,109
18.11.2009, 09:05  [ТС] 10
FolDel, еще как вариант, по принцыпу ИНИ файла, только в dll библиотеку засунуть, тогда несколько труднее будет взломать .... имхо ))
0
18.11.2009, 09:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.11.2009, 09:05
Помогаю со студенческими работами здесь

Программа для защиты паролем системы
Здравствуйте, уважаемые форумчане) я хотел поинтересоваться какая программа нынче самая популярная...

Программа для защиты папки паролем
Мне необходима программа для защиты папки паролем. Удалось найти несколько ( типа Advanced Folder...

Программа для взлома системы с паролем.
Недавно меня посетила мысль о программе для пользователей Пк которых понизили в правах до гостя и...

защита директории паролем. Программа/ISAPI-фильтр
прогу/ISAPI-фильтр посоветуйте. требуется закрывывать доступ к директории (и всем файлам в ней...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru