![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Всем привет! Помогите мне с одной проблемой) Суть такая, я создал программу при запуске которой открывается окно авторизации, после прохождения авторизации открывается главное окно программы. Так вот проблема в том, что окно авторизации не закрывается после открытия главного окна, а продолжает висеть пока его не закроешь с кнопки Выход, но если его закрыть с кнопки Выход то закрывается вся программа( А мне надо чтобы работало так, запустили программу открылось окно авторизации, прошли авторизацию, закрылось окно авторизации потом открылось главное окно программы. Лазил везде по форумам пытался разобраться но нечего так и не нашел( Помогите люди добрые пожалуйста!
Последовательность моих действий при создании проекта программы: 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;Вроде, так. |