login.pas
来自「delphi框架可以学习, 写的很好的」· PAS 代码 · 共 551 行 · 第 1/2 页
PAS
551 行
unit Login;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, RzButton, StdCtrls, Mask, RzEdit, jpeg, ExtCtrls, RzBHints,
RzStatus, RzPanel, RzBckgnd, RzTabs, RzPrgres, Psock, NMHttp;
type
TfrmLogin = class(TForm)
imgLogin: TImage;
RzPageControl1: TRzPageControl;
TabSheet1: TRzTabSheet;
TabSheet2: TRzTabSheet;
RzPanel1: TRzPanel;
Label1: TLabel;
Label2: TLabel;
lbVer: TLabel;
Label4: TLabel;
Label3: TLabel;
lbTime: TLabel;
Label5: TLabel;
Label6: TLabel;
lbIP: TLabel;
lbMAC: TLabel;
Label7: TLabel;
lbLocalMAC: TLabel;
RzSeparator1: TRzSeparator;
edtUserCode: TRzEdit;
edtPassword: TRzEdit;
btnExit: TRzBitBtn;
btnOK: TRzBitBtn;
RzStatusBar1: TRzStatusBar;
RzStatusPane1: TRzStatusPane;
spLoginInfo: TRzStatusPane;
btnUpdate: TRzBitBtn;
btnClose: TRzBitBtn;
btnAbout: TRzBitBtn;
RzSeparator2: TRzSeparator;
mmUpdate: TRzMemo;
TabSheet3: TRzTabSheet;
Label9: TLabel;
Label10: TLabel;
pbAll: TRzProgressBar;
pbCurrent: TRzProgressBar;
Label8: TLabel;
Label11: TLabel;
Timer1: TTimer;
Timer2: TTimer;
lbTimer: TLabel;
lbSpeed: TLabel;
btnStopUpdate: TRzBitBtn;
RzSeparator3: TRzSeparator;
NMHTTP1: TNMHTTP;
Label12: TLabel;
lbURL: TLabel;
Label13: TLabel;
lbUpdateing: TLabel;
NMHTTP2: TNMHTTP;
procedure FormCreate(Sender: TObject);
procedure btnExitClick(Sender: TObject);
procedure btnOKClick(Sender: TObject);
procedure imgLoginMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure imgLoginMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure edtPasswordEnter(Sender: TObject);
procedure edtPasswordKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure btnAboutClick(Sender: TObject);
procedure btnUpdateClick(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure NMHTTP1Failure(Cmd: CmdType);
procedure NMHTTP1PacketRecvd(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure btnStopUpdateClick(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
IsInit: Boolean;
X, Y: Integer;
gs_FileSize, gs_time: String;
procedure GetUserLastInfo(_UserCode: String);
function CheckUpdateInfo: Boolean;
function GetTempName(_FileName: String): String;
function GetSizeInfo(ASize: Currency): String;
function GetTimeInfo(Timer: Currency): String;
procedure Link;
procedure InitLink;
procedure UnLink;
public
{ Public declarations }
end;
var
frmLogin: TfrmLogin;
LoginCount: integer;
_X, _Y: Integer;
UpdateList: TStrings;
implementation
uses MyPublic, dm32, dmc32;
{$R *.dfm}
procedure TfrmLogin.btnExitClick(Sender: TObject);
begin
//先将更新文件处理掉
Close;
end;
procedure TfrmLogin.btnOKClick(Sender: TObject);
var ls_SQL, ls_Err, ls_Mac, ls_IP: String;
begin
ls_Mac := GetAdapterAddress(0);
ls_IP := GetIPAddress;
SynchroLocalTime; //同步系统时间
if CheckUser(edtUserCode.Text, edtPassword.Text, ls_Mac) then
begin
//成功登录 初始化用户信息
CurrentUser.LoginTime := Now;
CurrentUser.IP := ls_IP;
CurrentUser.MAC := ls_Mac;
//记录最后登录IP地址和时间
ls_SQL := 'UPDATE USERINFO SET LASTTIME = ''' + FormatDateTime('yyyy-mm-dd HH:MM:SS',now) + ''',' +
' LASTIP = ''' + CurrentUser.IP + ''','+
' LASTMAC = ''' + CurrentUser.MAC+ ''''+
' WHERE USERCODE = ''' + CurrentUser.UserCode + '''';
ls_err := doSQL(ls_SQL);
//记录用户名
WriteIni('Login','PrevUserCode', edtUserCode.Text);
//记录日志
RecordUserAction(SetSimpleEvent('成功登录','用户'+ edtUserCode.Text +'成功登录系统!'));
//打开90天内未完成的工作记录
OpenDataSet(dm.qryJobNote, 'SELECT * FROM JOBNOTE WHERE CLBZ='+ IntToStr(SHBZ_NOT)+
' AND (USERCODE =''' + edtUserCode.Text + ''''+
' OR USERCODE =''ALLUSER'')'+
' AND WTSJ >=''' + FormatDateTime('yyyy-mm-dd',Now-90)+''''+
' ORDER BY WTSJ DESC');
//打开近一周的登录事件
OpenDataSet(dm.qryLoginLog, 'SELECT * FROM SYSLOG WHERE EV_STYLE =''成功登录'''+
' AND USERCODE =''' + edtUserCode.Text + ''''+
' AND EV_STIME >=''' + FormatDateTime('yyyy-mm-dd',Now-7)+'''');
LOGINOK := True;
Close;
Exit;
end;
//登录失败
spLoginInfo.Caption := '用户名或密码错误,或不允许在此电脑此时间段登录!';
RecordUserAction(SetSimpleEvent('登录失败','所用用户为'+ edtUserCode.Text +',密码为'+ edtPassWord.Text));
edtPassword.Text := '';
edtUserCode.SetFocus;
inc(LoginCount);
if LoginCount > 2 then Close;
end;
procedure TfrmLogin.FormCreate(Sender: TObject);
var ls_Server, ls_ver: String;
begin
AppPath := ExtractFilePath(Application.ExeName);
//设置服务器
ls_Server := ReadIni('SERVER','NAME','');
dm.conn.Connected := False;
dm.conn.LoginPrompt := False;
dm.conn.ConnectionString := 'Provider=SQLOLEDB.1;Password=xiaobo;Persist Security Info=True;'+
'User ID=sa;Initial Catalog=JeansMIS;Data Source='+
ls_Server;
//设置服务器
dmc.conn.Connected := False;
dmc.conn.LoginPrompt := False;
dmc.conn.ConnectionString := 'Provider=SQLOLEDB.1;Password=xiaobo;Persist Security Info=True;'+
'User ID=sa;Initial Catalog=JeansMIS;Data Source='+
ls_Server;
//读取用户信息
SysLock := False;
LoginCount := 0;
ls_ver := GetVersionInfo(Application.ExeName);
if ls_ver = '' then lbVer.Caption := '[无效版本号]'
else lbVer.Caption := ls_ver;
lbTime.Caption:= '未知';
lbIP.Caption := '未知';
lbMAC.Caption := '未知';
lbLocalMAC.Caption := GetAdapterAddress(0);
edtUserCode.Text := ReadIni('Login', 'PrevUserCode','');
spLoginInfo.Caption := '请输入用户名和密码!';
//发现新版本则转至升级界面
RzPageControl1.ActivePageIndex := 0;
if CheckUpdateInfo then
begin
ShowMess('升级','发现更新版本的程序,请立即升级!', MB_OK);
RzPageControl1.ActivePageIndex := 1
end;
end;
procedure TfrmLogin.imgLoginMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
_X := X;
_Y := Y;
end;
procedure TfrmLogin.imgLoginMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
if ssLeft in Shift then
begin
Self.Left := Self.Left + (X - _X);
Self.Top := Self.Top + (Y - _Y);
end;
end;
procedure TfrmLogin.GetUserLastInfo(_UserCode: String);
var ls_SQL, ls_Err: String;
begin
ls_SQL := 'SELECT * FROM USERINFO WHERE USERCODE = ''' + _UserCode + '''';
ls_err := OpenDataSet(dm.qryFree, ls_SQL);
if ls_Err <> '' then
begin
lbTime.Caption := '读取错误!';
lbIP.Caption := '读取错误!';
lbMAC.Caption := '读取错误!';
dm.qryFree.Close;
Exit;
end;
if not dm.qryFree.Active then Exit;
if dm.qryFree.IsEmpty then
begin
lbTime.Caption := '不存在该用户!';
lbIP.Caption := '不存在该用户!';
lbMAC.Caption := '不存在该用户!';
dm.qryFree.Close;
Exit;
end;
with dm.qryFree do
begin
lbTime.Caption := GetChinaTime(FieldByName('LASTTIME').AsDateTime);
lbIP.Caption := FieldByName('LASTIP').AsString;
lbMAC.Caption := FieldByName('LASTMAC').AsString;
dm.qryFree.Close;
end;
end;
procedure TfrmLogin.edtPasswordEnter(Sender: TObject);
begin
if edtUserCode.Text <> '' then
GetUserLastInfo(edtUserCode.Text); //获取并显示用户资料
end;
procedure TfrmLogin.edtPasswordKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=VK_RETURN then
if edtPassword.Text <> '' then btnOKClick(nil);
end;
procedure TfrmLogin.btnAboutClick(Sender: TObject);
begin
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?