📄 systemloginfm.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 + -