⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sys_login.pas

📁 一个MRPII系统源代码版本
💻 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 + -