📄 sys_login.pas
字号:
// 加入动画
unit Sys_Login;
Interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
BaseDialogIme, StdCtrls, Mask, ExtCtrls,menus,db, AdODB, ComCtrls,
Buttons,registry;
Type
TFrm_Sys_Login = Class(TFrm_BaseDialogIme)
Label4: TLabel;
medt_Date: TMaskEdit;
Label6: TLabel;
edt_Password: TEdit;
AdoQry_Login: TAdoQuery;
Animate1: TAnimate;
Cmbx_User: TComboBox;
btn_Help: TButton;
Bevel1: TBevel;
CheckBox1: TCheckBox;
SpeedButton1: TSpeedButton;
procedure FormActivate(Sender: TObject);
procedure btn_okClick(Sender: TObject);
procedure check(sender:tobject);Override;
procedure FormCreate(Sender: TObject);
procedure btn_CancelClick(Sender: TObject);
Function UpdateLoginDate(R_UpdateType:String):Integer;
Function GetLoginDate(R_InPutDate:String;R_GetType:Integer):String;
procedure SpeedButton1Click(Sender: TObject);
procedure edt_tmpExit(Sender: TObject);
private
Passwordtimes:integer; //错误输入口令的次数
//更新全局变量及statusBar
public
PassOK:boolean;
operatorid:integer;
operatordate:string;
pressok:boolean;
EmployeeCode:String; //用于外部接口
EmployeeName:string; //用于外部接口
procedure InitForm(AdoConnection:tAdoConnection);
end;
var
Frm_Sys_Login: TFrm_Sys_Login;
implementation
uses Sys_Global, Main,Sys_ChangePassword;
{$R *.DFM}
procedure TFrm_Sys_Login.FormActivate(Sender: TObject);
begin
repaint;
Cmbx_User.clear;
with AdoQry_Login do
begin
Close;
SQL.Text:='select e.EmployeeCode,e.EmployeeName '+
' from Employee e,operator o '+
' where e.EmployeeCode=o.EmployeeCode and '+
' o.operatorUsable=1';
Open;
while not Eof do
begin
Cmbx_User.Items.Add(fieldbyname('EmployeeCode').asstring+' '+fieldbyname('EmployeeName').asstring);
Next;
end;
Close;
end;
pressok:=False;
Passwordtimes:=0;
edt_Password.Text:='';
medt_Date.Text:=DateToStr(Date());
Cmbx_User.setfocus;
end;
//集中的有效性检查
procedure TFrm_Sys_Login.check(sender:tobject);
var StrSqlText:String;
StrFirstLoginDate:String;
StrLastLoginDate:string;
StrCurrentDate:String;
Date1:Integer;
begin
inherited;
checkResult:=True;
If okbutton or (controlName='Cmbx_User') then
begin
with AdoQry_Login do
begin
Close;
sql.clear;
sql.Add('select o.*,e.EmployeeName '+
'from operator o,Employee e '+
'where o.EmployeeCode=e.EmployeeCode and '+
' o.EmployeeCode=:operatorCode');
Close;
Parameters.ParambyName('operatorCode').Value:=getCode(Cmbx_User.text);
open;
if eof then
begin
DispInfo(' 非法用户代码! ',1);
checkResult:=False;
exit;
end;
//得到操作员ID
Cmbx_User.text:=getCode(Cmbx_User.text)+' '+fieldbyname('EmployeeName').asstring;
if fieldbyname('operatorUsable').asinteger=0 then
begin
DispInfo(' 该用户已经无效! ',1);
checkResult:=False;
exit;
end;
end;
end;
if okbutton or (controlName='edt_Password') then
begin
if Trim(AdoQry_Login.fieldbyname('Password').asstring)<>edt_Password.Text then
begin
DispInfo(' 非法口令! ',1);
Passwordtimes:=Passwordtimes+1;
if Passwordtimes=3 then
btn_Cancelclick(sender);
checkResult:=False;
exit;
end
else
begin
PassOK:=True;
end;
end;
if okbutton or (controlName='medt_Date') then
begin
try
medt_Date.text:=datetostr(strtodate(medt_Date.text));
operatordate:=medt_Date.text;
except
DispInfo(' 非法日期! ',1);
checkResult:=False;
exit;
end;
end;
If OkButton Then
begin
StrSqlText:='Select *,GetDate() As ToDate From SysLoginParam ';
With AdoQry_Login Do
begin
Close;
Sql.clear;
Sql.Add(StrSqlText);
Open;
IF Eof Then
begin
DispInfo(' 登录参数非法,请联系软件提供者! ',1);
CheckResult:=False;
Exit;
end;
If (fieldbyname('Param1').Value<>'0') Then
begin
{ If (fieldbyname('Param4').Value='1') Then
begin
DispInfo(' 系统试用期已过,请用正式版! ',1);
CheckResult:=False;
Exit;
end;
}
StrFirstLoginDate:=fieldbyname('Param1').AsString;
StrLastLoginDate:=fieldbyname('Param2').AsString;
StrCurrentDate:=Copy(fieldbyname('ToDate').AsString,1,10);
IF (StrFirstLoginDate='') Then
UpdateLoginDate('FirstLast')
Else
begin
StrFirstLoginDate:=GetLoginDate(StrFirstLoginDate,2);
StrFirstLoginDate:=Copy(StrFirstLoginDate,1,4)+'.'+Copy(StrFirstLoginDate,5,2)+
'.'+Copy(StrFirstLoginDate,7,2);
StrLastLoginDate:=GetLoginDate(StrLastLoginDate,2);
StrLastLoginDate:=Copy(StrLastLoginDate,1,4)+'.'+Copy(StrLastLoginDate,5,2)+
'.'+Copy(StrLastLoginDate,7,2);
If StrCurrentDate<StrLastLoginDate Then // 当前日期小于最近登录日期
begin
DispInfo(' 登录日期有误,请与系统员联系! ',1);
CheckResult:=False;
Exit;
end;
end;
If (StrToDateTime(StrCurrentDate)-90)>StrToDateTime(StrFirstLoginDate) Then
UpdateLoginDate('Lock');
StrCurrentDate:=Copy(fieldbyname('ToDate').AsString,1,10);
UpdateLoginDate('Last');
end;
end;
end;
end;
procedure TFrm_Sys_Login.btn_okClick(Sender: TObject);
begin
inherited;
EmployeeCode:=GetCode(Cmbx_User.Text);
EmployeeName:=GetName(Cmbx_User.Text);
pressok:=True;
IF PassOK=True Then
modalResult:=mrok;
end;
//设置AdoQuery的连接
procedure TFrm_Sys_Login.InitForm(AdoConnection:tAdoConnection);
begin
AdoQry_Login.Connection:=AdoConnection;
end;
procedure TFrm_Sys_Login.FormCreate(Sender: TObject);
begin
inherited;
try
Animate1.fileName:=ExtractFilePath(Application.ExeName)+'login.avi';
Animate1.Active:=True;
except
DispInfo(' 登录图画找不到! ',3);
end;
operatorid:=0;
operatordate:='';
EmployeeCode:='';
EmployeeName:='';
end;
Function TFrm_Sys_Login.UpdateLoginDate(R_UpdateType:String):Integer;
var StrSqlText:String;
AdoQry_Login1:TAdoQuery;
StrCurrentDate:String;
begin
AdoQry_Login1:=TAdoQuery.Create(Nil);
AdoQry_Login1.Connection:=AdoQry_Login.Connection;
StrSqlText:='Select GetDate() As ToDate';
AdoQry_Login1.Close;
AdoQry_Login1.Sql.clear;
AdoQry_Login1.Sql.Add(StrSqlText);
AdoQry_Login1.Open;
StrCurrentDate:=Copy(AdoQry_Login1.fieldbyname('ToDate').AsString,1,10);
If R_UpdateType='Last' Then
StrSqlText:='Update SysLoginParam Set Param2='+GetLoginDate(StrCurrentDate,1)+'';
If R_UpdateType='FirstLast' Then
StrSqlText:='Update SysLoginParam Set Param2='+GetLoginDate(StrCurrentDate,1)+','+
'Param1='+GetLoginDate(StrCurrentDate,1)+'';
If R_UpdateType='Lock' Then
StrSqlText:='Update SysLoginParam Set Param2='+GetLoginDate(StrCurrentDate,1)+','+
'Param4=''1''';
AdoQry_Login1.Close;
AdoQry_Login1.Sql.clear;
AdoQry_Login1.Sql.Add(StrSqlText);
AdoQry_Login1.ExecSQL;
end;
Function TFrm_Sys_Login.GetLoginDate(R_InPutDate:String;R_GetType:Integer):String;
//R_InPutDate 传入日期参数
//R_GetType 加密与解密类型参数 1: 加密;2:解密
var StrGetDate:String;
IntGetDate:Integer;
begin
R_InPutDate:=Trim(R_InPutDate);
If R_GetType=1 Then
begin
StrGetDate:=Copy(R_InPutDate,1,4)+Copy(R_InPutDate,6,2)+Copy(R_InPutDate,9,2);
StrGetDate:=IntToStr(((StrToInt(StrGetDate)+33)*3)-55);
Result:=StrGetDate;
end
Else
begin
StrGetDate:=FloatToStr(((StrToInt(R_InPutDate)+55)/3)-33);
Result:=StrGetDate;
end;
end;
procedure TFrm_Sys_Login.btn_CancelClick(Sender: TObject);
begin
inherited;
{ if Frm_Main.MainMenu1.Items.Count=0 then
if Passwordtimes<>3 then
if DispInfo(' 确认退出系统吗? ',2)='n' then
begin
Cmbx_User.setfocus;
exit;
end;
}
end;
procedure TFrm_Sys_Login.SpeedButton1Click(Sender: TObject);
var str:String;
iReg: TRegistry;
begin
str:='';
if not inputQuery('注册','请输入服务器IP地址:',str) then exit;
iReg := TRegistry.Create;
with iReg do
begin
RootKey:=HKEY_LOCAL_MACHINE;
if OpenKey('software', True) then
if OpenKey('BSMrpii', True) then
WriteString('ServerIP', str);
end;
iReg.Free;
end;
procedure TFrm_Sys_Login.edt_tmpExit(Sender: TObject);
begin
inherited;
CheckBox1.Enabled:=True;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -