想实现登陆后关闭登陆窗体显示另外一个窗体
但是现在登陆窗体关闭后,不显示主窗体,在数据模块窗体中定义了变量 iflogin
登陆窗体代码:
unit UnitLogin;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB, ExtCtrls;
type
TLogin = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
EditUserID: TEdit;
EditPwd: TEdit;
BtnOK: TButton;
BntAbort: TButton;
ADOQr: TADOQuery;
Panelts: TPanel;
ComboBox1: TComboBox;
procedure BntAbortClick(Sender: TObject);
procedure EditUserIDKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure EditUserIDExit(Sender: TObject);
procedure ComboBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure EditPwdKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure BtnOKClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Login: TLogin;
implementation
uses DataModule,UnitPeisSystem;
{$R *.dfm}
procedure TLogin.BntAbortClick(Sender: TObject);
begin
close;
end;
procedure TLogin.BtnOKClick(Sender: TObject);
var pwd : String ;
begin
userid := EditUserID.Text;
stationname := ComboBox1.Text;
pwd := EditPwd.Text;
ADOQr.Close;
ADOQr.SQL.Clear;
ADOQr.SQL.Text := ' select * from Tb_User where UserID='''+userid+'''';
adoqr.Open;
if adoqr.RecordCount=0 then
begin
EditUserID.Clear;
EditUserID.SetFocus;
Panelts.Caption := '无效用户!' ;
end else
begin
ADOQr.Close;
ADOQr.SQL.Clear;
ADOQr.SQL.Text := ' select * from Tb_User '+
' where UserID='''+userid+''' and stationname='''+stationname+''' and UserPwd='''+pwd+'''';
adoqr.Open;
if adoqr.RecordCount=0 then
begin
ShowMessage('密码错误,请重新输入!');
EditPwd.Clear;
EditPwd.SetFocus;
Panelts.Caption := '密码错误!' ;
ifLogin := false ;
end else
begin
user := ADOQr.FieldByName('Username').Value;
module := ADOQr.FieldByName('ModuleName').Value;
ifLogin := true ;
Login.close;
//login.Hide;
//ClearMainForm;
//Pointer(@application.MainForm^) := nil ;
//Application.CreateForm(TFormPeisSystem,FormPeisSystem);
//FormPeisSystem.Show;
//Login.Destroy;
end;
end;
end;
procedure TLogin.ComboBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=13 then
begin
EditPwd.SetFocus;
end;
end;
procedure TLogin.EditPwdKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=13 then
begin
BtnOK.SetFocus;
end;
end;
procedure TLogin.EditUserIDExit(Sender: TObject);
begin
if EditUserID.Text <> '' then
begin
ADOQr.Close;
ADOQr.SQL.Clear;
ADOQr.sql.Text := ' select * from Tb_User where UserID='''+EditUserID.Text+'''';
ADOQr.Open;
if ADOQr.RecordCount =0 then
begin
EditUserID.Clear;
EditUserID.SetFocus;
Panelts.Caption := '无效用户!' ;
end else
begin
ComboBox1.Items.Clear;
ADOQr.First;
ComboBox1.Text := ADOQr.FieldByName('stationname').Value ;
while not ADOQr.eof do
begin
ComboBox1.Items.Add(ADOQr.FieldByName('stationname').Value);
ADOQr.Next;
end;
end;
end;
end;
procedure TLogin.EditUserIDKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=13 then
begin
ComboBox1.SetFocus;
end;
end;
procedure TLogin.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action := caFree ;
end;
end.
工程文件代码:
program Project;
uses
Forms,
UnitLogin in 'UnitLogin.pas' {Login},
DataModule in 'DataModule.pas' {DataModuleA: TDataModule},
UnitPeisSystem in 'Peis\UnitPeisSystem.pas' {FormPeisSystem};
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TDataModuleA, DataModuleA);
Application.CreateForm(TLogin, Login);
if ifLogin then
begin
Application.CreateForm(TFormPeisSystem, FormPeisSystem);
end;
Application.Run;
end.
[解决办法]
用MDI创建窗口
1.先在DELPHI-FILE-NEW-OTHER-PROJECT中选MDI APPLICATION,然后保存项目到自己指定的文件夹.
2.新建一个FORM2,在FORM2页面中的FormStyleg一定要设成fsNormal,在DELPHI中的菜单选PROJECT-OPTION中进入FORM选项卡,把FORM2从AUTO CREATE FORMS 移到 Available Forms
3.在FORM2中的验证登陆成功时加入
Form2.Hide; //登陆验证页面
MainForm.Show; //父窗体
4.在FORM2中的FormCloseQuery事件中加入
CanClose:=False;
5.用记事本打开刚才保存项目的文件夹,打开父窗口的MDIAPP.dpr文件,一般DELPHI7自动创建的都是这个名称,修改下面其中某些内容
一定要在Uses中增加Controls,然后在BEGIN和END之间修改下面内容
Application.CreateForm(TForm2, Form2);这句去掉,就是刚才建立的FORM2 再增加下面语句
Form2:=TForm2.Create(Application);
if Form2.ShowModal<>mrOK then
Application.Terminate;
[解决办法]
Procedure TForm2.Button1Click(Sender: TObject);
begin
Form1.hide;
//Form2:=Tform2.Create(self);
//form2.showmodal;
Form2.Show;
end;