Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
valli_vasia
1 / 1 / 0
Регистрация: 09.12.2015
Сообщений: 26
1

Окно авторизации в Delphi

09.07.2017, 10:38. Просмотров 1050. Ответов 10
Метки нет (Все метки)

Всем привет! Помогите мне с одной проблемой) Суть такая, я создал программу при запуске которой открывается окно авторизации, после прохождения авторизации открывается главное окно программы. Так вот проблема в том, что окно авторизации не закрывается после открытия главного окна, а продолжает висеть пока его не закроешь с кнопки Выход, но если его закрыть с кнопки Выход то закрывается вся программа( А мне надо чтобы работало так, запустили программу открылось окно авторизации, прошли авторизацию, закрылось окно авторизации потом открылось главное окно программы. Лазил везде по форумам пытался разобраться но нечего так и не нашел( Помогите люди добрые пожалуйста!

Последовательность моих действий при создании проекта программы:
1. Создал Дата Модуль (DataModule1) в него поместил ADOConnection1 и ADOQuery1 подключил туда базу данных (bd.mdb) с логинами и паролями.
2. Создал Форму (Form2) это форма авторизации на нее поместил два Edit1, Edit2 и две Button1,Button2.
3. Создал Форму (Form3) это форма главного окна программы она пока пустая.

Код Project1 (Код создания проекта):

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
program Project1;
 
uses
  Forms,
  Unit1 in 'Unit1.pas' {DataModule1: TDataModule},
  Unit2 in 'Unit2.pas' {Form2},
  Unit3 in 'Unit3.pas' {Form3};
 
{$R *.res}
 
begin
  Application.Initialize;
  Application.CreateForm(TDataModule1, DataModule1);
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm3, Form3);
  Application.Run;
end.


Код Unit1 (Дата Модуль):

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
unit Unit1;
 
interface
 
uses
  SysUtils, Classes, DB, ADODB;
 
type
  TDataModule1 = class(TDataModule)
    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  DataModule1: TDataModule1;
 
implementation
 
{$R *.dfm}
 
end.

Код Unit2 (Окно авторизации):

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
unit Unit2;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm2 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form2: TForm2;
 
implementation
 
uses Unit1, Unit3;
 
{$R *.dfm}
 
procedure TForm2.Button2Click(Sender: TObject);
begin
Close;
end;
 
procedure TForm2.Button1Click(Sender: TObject);
begin
 DataModule1.ADOQuery1.SQL.Clear;
 DataModule1.ADOQuery1.SQL.Add('SELECT Password FROM Users WHERE login='+#39+Edit1.Text+#39);
 DataModule1.ADOQuery1.Open;
  if DataModule1.ADOQuery1.IsEmpty
   then
    ShowMessage('ÏîëüçîâГ*òåëü '+Edit1.Text+' Г*ГҐ Г*Г*éäåГ*!')
   else
  if DataModule1.ADOQuery1.FieldByName('Password').Value <> Edit2.Text
   then
    ShowMessage('ГЌГҐГўГҐГ°Г*ûé ГЇГ*ðîëü!')
   else
    Form3.Show;
end;
 
end.


Ну и Код Unit3 (Главное окно программы оно пока пустое):

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
unit Unit3;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;
 
type
  TForm3 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form3: TForm3;
 
implementation
 
{$R *.dfm}
 
end.



Создаю проект в Delphi 7. Подскажите где и как править код чтобы все получилось. Заранее очень благодарен за ответ! Не пинайте сильно я новичок в программировании)
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2017, 10:38
Ответы с готовыми решениями:

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

Окно авторизации пользователя и база данных
Доброе время суток. Мы с моим другом новички в этом и по этому сильно не...

Форма авторизации в Delphi
В Делфи новичок, поэтому хотел бы узнать, как сделать форму авторизации. У...

Ошибка Авторизации на сайте - Delphi
Привет всем! помогите решить проблему , что это за ошибка? Скриншот:

Создание авторизации в Delphi c пропиской логина и пароля с первым запуском программы
Доброго времени суток уважаемые программисты! Облазил весь форум с вопросом об...

10
TFullControl
405 / 326 / 192
Регистрация: 20.10.2016
Сообщений: 1,035
09.07.2017, 11:30 2
Строки 49 - 50 писать так:
Delphi
1
2
3
4
5
else
   begin
    Form3.Show;
    Form1.Hide;
   end;
1
valli_vasia
1 / 1 / 0
Регистрация: 09.12.2015
Сообщений: 26
09.07.2017, 11:57  [ТС] 3
Спасибо за ответ, но получается так что теперь окно авторизации убирается как надо но при выходе из программы программа не закрывается полностью( Видимо потому что окно авторизации просто сворачивается и продолжает дальше висеть после закрытия программы только в свернутом виде, пока через диспетчер задач не завершить этот процесс программа не закроется полностью( Или может я что то не так сделал?
0
TFullControl
405 / 326 / 192
Регистрация: 20.10.2016
Сообщений: 1,035
09.07.2017, 12:10 4
Лучший ответ Сообщение было отмечено valli_vasia как решение

Решение

Цитата Сообщение от valli_vasia Посмотреть сообщение
авторизации просто сворачивается
Не сворачивается, а становится невидимым.
Цитата Сообщение от valli_vasia Посмотреть сообщение
программа не закрывается полностью
Кто вам виноват, что вы не правильно ее закрываете. Для выхода из ПО нужно закрывать мэйн форму, а не ту на которой вы находитесь на момент действия.

Событие OnClose 3-й формы
Delphi
1
2
3
4
procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Form1.Close;
end;
1
valli_vasia
1 / 1 / 0
Регистрация: 09.12.2015
Сообщений: 26
09.07.2017, 12:18  [ТС] 5
TFullControl, Спасибо огромное все получилось!
0
U-III
56 / 56 / 12
Регистрация: 24.10.2012
Сообщений: 177
09.07.2017, 14:01 6
1) Вообще не правильный подход. Костыль на костыле и костылем погоняет.
У него главная форма считается - окно авторизации.
Правильно в обработчике onCreate главной формы - выводить окно авторизации (которое кстати можно прям в нем и создавать и уничтожать). А уже относительно того что сделано в окне авторизации - продолжать запуск приложения или завершать его.
2) Вообще не желательно гонять пароли в чистом виде - тем более запрашивать пароль из базы
Вот так будет надежнее
Delphi
1
2
3
4
5
6
7
8
9
 password:=AnsiLowerCase(MD5DigestToStr(MD5String(Edit2.Text)));
 DataModule1.ADOQuery1.SQL.Clear;
 DataModule1.ADOQuery1.SQL.Add('SELECT `login` FROM `Users` WHERE `login`='''+Edit1.Text+''' AND MD5(`Password`)='''+password+'''  LIMIT 1');
 DataModule1.ADOQuery1.Open;
  if DataModule1.ADOQuery1.IsEmpty
   then
    ShowMessage('Неверный пароль')
   else
    Form3.Show;
1
qwertehok
2306 / 2210 / 602
Регистрация: 29.08.2013
Сообщений: 14,760
10.07.2017, 07:05 7
Цитата Сообщение от U-III Посмотреть сообщение
Вот так будет надежнее
не будет
по md5 получить пароль - нет проблем

Цитата Сообщение от U-III Посмотреть сообщение
ShowMessage('Неверный пароль')
а если неверный логин?
0
U-III
56 / 56 / 12
Регистрация: 24.10.2012
Сообщений: 177
10.07.2017, 07:30 8
qwertehok, на получи
65C0B930C19E22DCF3B08E979544AF88E2C699EE
По второму согласен, нужно так
ShowMessage('Неверный логин или пароль')
0
qwertehok
2306 / 2210 / 602
Регистрация: 29.08.2013
Сообщений: 14,760
10.07.2017, 08:22 9
Цитата Сообщение от U-III Посмотреть сообщение
на получи
иди и получи - у меня базы хешей нет, а искать лень
(но если нужно - получат)
0
U-III
56 / 56 / 12
Регистрация: 24.10.2012
Сообщений: 177
10.07.2017, 08:43 10
qwertehok, Слова были из песни - слышал звон, да не знаю где он.
Вот именно что если такой пароль (или его коллизия) хоть раз попал в базу, а если использовать нормальные пароли, то нет его ни в какой базе.
0
qwertehok
10.07.2017, 09:24     Окно авторизации в Delphi
  #11

Не по теме:

Цитата Сообщение от U-III Посмотреть сообщение
а если использовать нормальные пароли
а давай ты про нормальные пароли расскажешь пользователям?

0
10.07.2017, 09:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2017, 09:24
Привет! Вот еще темы с ответами:

Окно ошибки Delphi 7
Народ напомните как зделать окно ошибки!а то соовсем из головы вылетело :wall:

Окно вывода в Delphi
Tstringrid или Tdrawgrid в чём разница и какое лучше использовать для...

Delphi 7: Как настроить всплывающее окно
Как настроить вот такое всплывающее окно?


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru