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

📄 systemloginfm.pas

📁 一个电力部门的催缴费用系统
💻 PAS
字号:
unit systemLoginFM;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, Buttons, StdCtrls,db,dbtables,dbctrls, ScktComp;

type
  Tfrm_Login = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Label2: TLabel;
    EdPwd: TEdit;
    Bevel1: TBevel;
    btncancel: TSpeedButton;
    btnModify: TSpeedButton;
    Label3: TLabel;
    EdWorkNo: TEdit;
    btnReceiveMsg: TButton;
    sbtnConfirm: TSpeedButton;
    Bevel3: TBevel;
    Panel3: TPanel;
    btnIslogin: TButton;
    procedure FormActivate(Sender: TObject);
    procedure btncancelClick(Sender: TObject);
    procedure btnModifyClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure EdPwdKeyPress(Sender: TObject; var Key: Char);
    procedure sbtnConfirmClick(Sender: TObject);
    procedure TmOnLineTimer(Sender: TObject);
    procedure EdWorkNoKeyPress(Sender: TObject; var Key: Char);
    procedure btnReceiveMsgClick(Sender: TObject);
  private
    { Private declarations }
    Wait_100ms : Integer;
    Wait_Times : Integer;
    procedure cover(cover_mode:Integer;MessageStr:String);
  public
    { Public declarations }
    BLogin:Boolean;
  end;

const
    MaxLoginWaitSecond=30;          //登录超时时间30秒
    LoginCoverOpen=0;
    LoginCoverClose=1;
    LoginCoverChangeMsg = 99;
var
    Exit_Flag   : Boolean;
    ReloginFlag : Boolean = False; //在程序内重新登录标志
    frm_Login   :Tfrm_Login;
implementation
uses
    systemPH, systemDM, systemModiPwdFM;

const MaxLoginNum=3;
{$R *.DFM}


procedure Tfrm_Login.FormActivate(Sender: TObject);
begin
  EdWorkNo.Text   :=sysDM.ReadIni('System','UserName','');
  EdPwd.Text      :='';
  if Length(EdWorkNo.Text)>0 then
    EdPwd.SetFocus
  else
    Edworkno.SetFocus;
  with Panel3 do
  begin
    Top     := 0;
    Left    := 0;
    Width   := self.ClientWidth;
    Height  := 0; //FormLogin.ClientHeight;
    Visible := False;
  end;
  //如果是测试状态,就直接进入,以 8888/6666工号/口令
  if SystemConst_Debugstate then
  begin
    if FileExists(sysDM.ExePath+'debug.ini') then
    begin
        EdWorkno.Text := 'wen';
        EdPwd.text    := '1';
        sbtnConfirm.Click;
    end;
  end;
end;

procedure Tfrm_Login.btncancelClick(Sender: TObject);
begin
  BLogin:=False;
  Close;
end;

procedure Tfrm_Login.btnModifyClick(Sender: TObject);
begin
  sysDM.ShowModalForm(Tfrm_ModiPwd);
end;

procedure Tfrm_Login.FormCreate(Sender: TObject);
begin
  Wait_100ms := 0;
  Wait_times := 100;
  Position :=poDeskTopCenter;
end;

procedure Tfrm_Login.EdPwdKeyPress(Sender: TObject; var Key: Char);
begin
    if key=#13 then
    begin
       EdWorkNo.SetFocus;
       sbtnconfirm.Click;
    end;
end;

procedure Tfrm_Login.sbtnConfirmClick(Sender: TObject);
var
  WorkID,WorkPwd:string;
  tempappnamestr,AppName,AppVer : string;
begin
    BLogin    := False;
    AppName := UpperCase(sysDM.AppName);
    AppVer  := Trim(sysDM.AppVer);
    tempappnamestr := UpperCase(sysDM.ExeName) ;
    if not (UpperCase(AppName) = tempappnamestr ) then
    begin
        ShowMessage('应用程序名不可改变!,' + AppName + ' <> ' + tempappnamestr);
        cover(LoginCoverClose,'应用程序名不可改变!');
        exit;
    end;

    WorkID    := UpperCase(Trim(Edworkno.text));
    WorkPwd   := Trim(EdPwd.text);

    if sysDM.SQL_Querys(sysDM.Qr_sysTemp,'Select A.*,B.RoleAuth RoleAuth from SysLogin A,SysRole B Where Upper(WorkID)='
     +#39+WorkID+#39+' and Pwd='+#39+WorkPwd+#39+' and A.RoleName=B.RoleName')  then
    begin
      with sysDM.Qr_sysTemp do
      begin
        sysDM.WorkAuthStr     := FieldByName('RoleAuth').AsString;
        sysDM.WorkRole        := FieldByName('RoleName').AsString;
        sysDM.WorkName        := FieldByName('WorkName').AsString;

      end;
      sysDM.WorkId:=WorkID;
      sysDM.WorkPwd:=WorkPwd;
      BLogin:=True;
    end else
    begin
      ShowMessage('用户名或口令不正确!');
      Exit;
    end;

    sysDM.WriteIni('System','UserName',EdWorkNo.Text);
    Close;

end;

PROCEDURE Tfrm_Login.cover(Cover_Mode:Integer;MessageStr:String);
VAR
    m0top,m0left,m0width,m0height: Integer;
    m1top,m1left,m1width,m1height: Integer;
    step_i ,step_max : Integer;
    Step_rate : real;
BEGIN
    With self.Panel3 DO
    BEGIN
        Caption := MessageStr;
        CASE Cover_Mode OF
            0:
            //显示封面
            BEGIN
                Step_max    := 15;

                m1top       :=0;
                m1left      :=0;
                m1Width     :=self.ClientWidth;
                m1height    :=self.ClientHeight;

                m0top       := round(m1height/2);
                m0left      := round(m1width/2);
                m0Width     := 0;
                m0height    := 0;


                top     := m0top;
                left    := m0left;
                width   := m0Width;
                height  := m0Height;
                VISIBLE:= TRUE;
                for step_i := 1 to step_Max do
                begin
                    Step_Rate := step_i / step_max;
                    top     := m0top + round((m1top - m0top) * Step_Rate) ;
                    left    := m0left + round((m1left - m0left) * step_rate);
                    Width   := m0width + round((m1width - m0width) * step_rate);
                    Height  := m0height + round((m1height -m0height) * step_rate);
                    //Refresh;
                end;
                top := m1top;
                left := m1left;
                width := m1width;
                height := m1height;
            END;
            1:
            //关闭封面
            BEGIN
                Step_max    := 15;

                m0top      :=0;
                m0left      :=0;
                m0Width     :=self.ClientWidth;
                m0height    :=self.ClientHeight;

                m1top       := round(m0height/2);
                m1left      := round(m0width/2);
                m1Width     := 0;
                m1height    := 0;

                top     := m0top;
                left    := m0left;
                width   := m0Width;
                height  := m0Height;
                VISIBLE:= TRUE;
                for step_i := 1 to step_Max do
                begin
                    Step_Rate := step_i / step_max;
                    top     := m0top + round((m1top - m0top) * Step_Rate) ;
                    left    := m0left + round((m1left - m0left) * step_rate);
                    Width   := m0width + round((m1width - m0width) * step_rate);
                    Height  := m0height + round((m1height -m0height) * step_rate);
                    //Refresh;
                end;
                top := m1top;
                left := m1left;
                width := m1width;
                height := m1height;
            END;
            2:
            //更换提示字串
            BEGIN
            END;

        END;
    END;
END;

procedure Tfrm_Login.TmOnLineTimer(Sender: TObject);
begin
{    TmOnLine.Enabled :=False;
    WITH StoredProc1 DO
    BEGIN
        Params[0].AsString:='强行添加';
        Params[1].AsString:=WorkID;
        Params[2].AsString:=WorkRole;
        Params[3].AsString:=AgentNO;
        Params[4].AsString:=AppName;
        Params[5].AsString:=AppVer;
        Params[6].AsString:=HostName;
        Params[7].AsString:=HostIP;
        Prepare;
        Execproc;
        //ShowMessage(trim(Params[8].AsString));
        IF trim(Params[8].AsString)='添加成功' THEN
        BEGIN
            //添加成功,可以进入系统
            BLogin:=True;
            FormLogin.Close;

        END;
        IF trim(Params[8].AsString)='记录已存在' THEN
        BEGIN
            //记录已存在,应询问是否可强行插入
            //检测是否为本机及本应用程序
            //Application.MessageBox('有其他员工正在用此工号存在
            SetLength(SendMsgParam,0);
            Msg_P.SendToAnyUser(MsgSocket,Params[6].Asstring,
                                Params[4].AsString,S_IsOnLine,SendMsgParam);
            TmOnLine.Interval :=OverT_OnLine*1000;

            TmOnLine.Enabled :=True;

        END;
        IF trim(Params[8].AsString)='申请ID错' THEN
        BEGIN
            //这是一个系统错误,一般不会发生,应考虑以下意外是否发生
            //1、表 RDS_DEF 是否正确  2、存贮过程 GetLoginID 是否正确
            //应退出系统!!!
        END;
    END;

    //WaitTime(2000);
 }
end;

procedure Tfrm_Login.EdWorkNoKeyPress(Sender: TObject; var Key: Char);
begin
  if key=#13 then
  begin
    if EdWorkNo.Text <>'' then
       EdPwd.SetFocus;
  end;
end;

procedure Tfrm_Login.btnReceiveMsgClick(Sender: TObject);
begin
    BLogin:=True;
    Close;
end;

end.




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -