📄 loginunit.pas
字号:
unit LoginUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, DB, DBTables, Registry, DBCtrls;
type
TLoginForm = class(TForm)
PanelBkGnd: TPanel;
Label2: TLabel;
Label1: TLabel;
Label3: TLabel;
L_name: TLabel;
Panel_button: TPanel;
Bevel_button: TBevel;
OKBtn: TButton;
CancelBtn: TButton;
E_ID: TEdit;
E_PassWord: TEdit;
query_pass: TQuery;
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure OKBtnClick(Sender: TObject);
procedure E_IDChange(Sender: TObject);
procedure E_IDKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure CancelBtnClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
B_halt: bool;
I_logo: integer;
{ Private declarations }
public
{ Public declarations }
end;
var
LoginForm: TLoginForm;
implementation
uses MainUnit, LogoUnit;
{$R *.dfm}
procedure TLoginForm.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
var
S_temppass: string;
begin
inherited;
if b_halt then
begin
query_pass.Close;
query_pass.Free;
application.Terminate;
exit;
end
else b_halt := true;
S_temppass := E_password.text;
USERNAME := L_name.Caption;
if (E_id.Text = '') or (L_name.Caption = '未知用户') then //用户名为空
begin
messagedlg('用户错误', mterror, [mbok], 0);
E_id.SetFocus;
canclose := false;
exit;
end //end if
else //用户名非空
begin
with query_pass do
begin
first;
while not eof do //检查用户名与密码
begin
if (USERNAME = fieldbyname('USERname').asstring) and
(S_tempPass = fieldbyname('Psd').asstring) then
begin
USERRIGHTSNAME := fieldbyname('rightsname').AsString;
USERRIGHTS := fieldbyname('rights').AsString;
break;
end;
next;
end; //end while
if eof then //用户名与密码不符
begin
inc(I_logo);
if I_logo >= 3 then
begin
messagedlg('您已尝试超过 3 次,系统将停止运行!', mterror, [mbok], 0);
query_pass.Close;
query_pass.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 if
end; //end with
end; //end else if;
MainForm.StatusBar_main.Panels.Items[3].Text := '操作员:【' + USERNAME + '】 权限:〖' + USERRIGHTSNAME + '〗';
query_pass.Free;
canclose := true;
end;
procedure TLoginForm.OKBtnClick(Sender: TObject);
begin
b_halt := false;
self.Close;
end;
procedure TLoginForm.E_IDChange(Sender: TObject);
begin
with query_pass do
begin
first;
while not eof do
begin
if E_id.Text = fieldbyname('ID').AsString then
begin
L_name.Caption := fieldbyname('USERName').AsString;
exit;
end
else
L_name.Caption := '未知用户';
next;
end;
end;
end;
procedure TLoginForm.E_IDKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = 27 then
begin
cancelbtn.Click;
exit;
end;
if (key = 13) or (key = 40) then { 判断是按执行键}
begin
key := 0;
perform(WM_NEXTDLGCTL, 0, 0); {移动到下一个控件}
end;
end;
procedure TLoginForm.CancelBtnClick(Sender: TObject);
begin
halt;
end;
procedure TLoginForm.FormCreate(Sender: TObject);
var
reg: TRegistry;
begin
self.Caption := application.Title + ' - ';
self.Caption := self.Caption + '用户登录';
I_logo := 0;
query_pass.DatabaseName := 'CPXSGL';
B_halt := true;
reg := TRegistry.Create;
Reg.RootKey := HKEY_CURRENT_USER;
with query_pass do
begin
sql.text := 'SELECT Sysuser.ID, Sysuser.NAME USERNAME, Sysuser.PASS Psd,'
+ ' SysUserRights.NAME RIGHTSNAME, SysUserRights.RIGHTS RIGHTS FROM Sysuser '
+ ' INNER JOIN SysUserRights ON (Sysuser.RIGHTS = SysUserRights.NAME)'
+ ' ORDER BY Sysuser.ID';
try
open;
except
if LogoForm.Showing then
LogoForm.Destroy;
messagedlg('数据库打开错误,可能指定的系统数据库文件不存在!' + #13 + #13
+ '系统将终止运行,请重新尝试打开本程序。'
+ #13 + #13 + '如果依然出现本信息,请与程序供应商联系。', mtError, [mbok], 0);
close;
try
reg.DeleteKey(S_RegTree);
finally
reg.CloseKey;
reg.free;
end;
application.Terminate;
end;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -