📄 loginunit.pas
字号:
unit LoginUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, DB, ADODB, Buttons, jpeg;
type
TLoginForm = class(TForm)
ADOQuery_Check: TADOQuery;
Image1: TImage;
Label3: TLabel;
E_PassWord: TEdit;
L_name: TLabel;
Label2: TLabel;
Label1: TLabel;
E_ID: TEdit;
btnOK: TBitBtn;
btnExit: TBitBtn;
procedure btnExit1Click(Sender: TObject);
procedure btnOK1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure btnOKClick(Sender: TObject);
procedure btnExitClick(Sender: TObject);
procedure E_PassWordKeyPress(Sender: TObject; var Key: Char);
procedure E_IDKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);
procedure E_IDChange(Sender: TObject);
private
{ Private declarations }
B_halt: bool;
I_logo: integer;
public
{ Public declarations }
end;
var
LoginForm: TLoginForm;
implementation
uses DMUnit, LogoUnit,MainUnit;
{$R *.dfm}
procedure TLoginForm.btnExit1Click(Sender: TObject);
begin
application.Terminate;
end;
procedure TLoginForm.btnOK1Click(Sender: TObject);
begin
b_halt := false;
self.Close;
end;
procedure TLoginForm.FormCreate(Sender: TObject);
begin
self.Caption := application.Title + ' - ';
self.Caption := self.Caption + '用户登录';
////////////
I_logo := 0;
B_halt := true;
////////////
with ADOQuery_check do
begin
Connection:=DM.ADOCon;
Close;
sql.Clear;
sql.text := 'SELECT Sysuser.用户名, Sysuser.姓名, Sysuser.密码,'
+ ' SysUserRights.角色, SysUserRights.权限 FROM Sysuser '
+ ' INNER JOIN SysUserRights ON (Sysuser.角色 = SysUserRights.角色)'
+ ' ORDER BY Sysuser.用户名';
try
active:=true;
except
if LogoForm.Showing then
LogoForm.Destroy;
messagedlg('数据库打开错误,可能指定的系统数据库文件不存在!' + #13 + #13
+ '系统将终止运行,请重新尝试打开本程序。'
+ #13 + #13 + '如果依然出现本信息,请与程序供应商联系。', mtError, [mbok], 0);
close;
application.Terminate;
end;
end;
end;
procedure TLoginForm.FormCloseQuery(Sender: TObject;
var
CanClose: Boolean);
var
S_temppass,S_USERID:string;
begin
if b_halt then
begin
ADOQuery_check.Close;
ADOQuery_check.Free;
application.Terminate;
exit;
end
else
b_halt := true;
//////////////////////////////////////////
S_temppass :=trim(E_password.text);
S_USERID :=trim(E_ID.Text);
if (E_id.Text = '') or (L_name.Caption = '未知用户') then //用户名为空
begin
messagedlg('用户错误', mterror, [mbok], 0);
E_id.SetFocus;
canclose := false;
exit;
end
else //用户名非空
begin
with ADOQuery_check do
begin
close;
open;
first;
while not eof do //检查用户名与密码
begin
if (S_USERID=trim(fieldbyname('用户名').asstring)) and (S_tempPass=trim(fieldbyname('密码').asstring)) then
begin
UserID:=trim(fieldbyname('用户名').AsString);
UserPassword:=trim(fieldbyname('密码').AsString);
UserName:= trim(fieldbyname('姓名').AsString);
UserRights:= trim(fieldbyname('权限').AsString);
UserRightsName:= trim(fieldbyname('角色').AsString);
{USER_add:=trim(fieldbyname('数据录入').AsString);
USER_edit:=trim(fieldbyname('数据修改').AsString);
USER_Del:=trim(fieldbyname('数据删除').AsString);
USER_print:=trim(fieldbyname('数据打印').AsString);
USER_Search:=trim(fieldbyname('查询').AsString);
}
break;
end;
next;
end;
//////////////////////////////
if eof then //用户名与密码不符
begin
inc(I_logo);
if I_logo >= 3 then
begin
messagedlg('您已尝试超过 3 次,系统将停止运行!', mterror, [mbok], 0);
ADOQuery_check.Close;
ADOQuery_check.Free;
application.Terminate;
end
else
begin
messagedlg('用户名与密码不符,请检查后重新输入。' + #13 + #13
+ '你还有 ' + inttostr(3 - I_logo) + ' 次机会!', mterror, [mbok], 0);
e_password.SetFocus;
e_password.SelectAll;
canclose := false;
exit;
end;
end;
end;
end;
/////////////////////////
/////////////
MainForm.stabar.Panels.Items[2].Text := '操作员:【' + Username + '】 权限:〖' + Userrightsname + '〗';
ADOQuery_check.Free;
canclose := true;
///////////////
end;
procedure TLoginForm.btnOKClick(Sender: TObject);
begin
b_halt := false;
self.Close;
end;
procedure TLoginForm.btnExitClick(Sender: TObject);
begin
application.Terminate;
end;
procedure TLoginForm.E_PassWordKeyPress(Sender: TObject; var Key: Char);
begin
if(key=#13)then
BtnOKClick(Sender);
end;
procedure TLoginForm.E_IDKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = 27 then
begin
btnExit.Click;
exit;
end;
if (key = 13) or (key = 40) then { 判断是按执行键}
begin
key := 0;
perform(WM_NEXTDLGCTL, 0, 0); {移动到下一个控件}
end;
end;
procedure TLoginForm.E_IDChange(Sender: TObject);
begin
with ADOQuery_check do
begin
close;
open;
first;
while not eof do
begin
if E_id.Text=trim(fieldbyname('用户名').AsString) then
begin
L_name.Caption:=trim(fieldbyname('姓名').AsString);
exit;
end
else
L_name.Caption := '未知用户';
next;
end;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -