|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Окно авторизации в Delphi
Всем привет! Помогите мне с одной проблемой) Суть такая, я создал программу при запуске которой открывается окно авторизации, после прохождения авторизации открывается главное окно программы. Так вот проблема в том, что окно авторизации не закрывается после открытия главного окна, а продолжает висеть пока его не закроешь с кнопки Выход, но если его закрыть с кнопки Выход то закрывается вся программа( А мне надо чтобы работало так, запустили программу открылось окно авторизации, прошли авторизацию, закрылось окно авторизации потом открылось главное окно программы. Лазил везде по форумам пытался разобраться но нечего так и не нашел( Помогите люди добрые пожалуйста!
Последовательность моих действий при создании проекта программы: 1. Создал Дата Модуль (DataModule1) в него поместил ADOConnection1 и ADOQuery1 подключил туда базу данных (bd.mdb) с логинами и паролями. 2. Создал Форму (Form2) это форма авторизации на нее поместил два Edit1, Edit2 и две Button1,Button2. 3. Создал Форму (Form3) это форма главного окна программы она пока пустая. Код Project1 (Код создания проекта): Код:
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 (Дата Модуль): Код:
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 (Окно авторизации): Код:
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 (Главное окно программы оно пока пустое): Код:
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. Подскажите где и как править код чтобы все получилось. Заранее очень благодарен за ответ! Не пинайте сильно я новичок в программировании) |
#2
|
|||
|
|||
Это вам, батенька, надо ручками, ручками.
1. Выкинь свое окно авторизации из автосоздания. Далее в файле проекта это должно выглядеть примерно так: Код:
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(TForm3, Form3); Application.CreateForm(TDataModule1, DataModule1); Form2 := TForm2.Create(Nil); If Not Form2.Authorized Then Halt(0); Form2.Free; Application.Run; end. Теперь пишем фнукицю Authorized в форме логина (ну и правим тот код, что есть): Код:
function TForm2.Authorized : Boolean; begin Result := ShowModal = mrOK; end; procedure TForm2.Button2Click(Sender: TObject); begin ModalResult := mrCancel; 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 ModalResult := mrCancel else ModalResult := mrOK end; Вроде, так. |