?? loginfrm.pas
字號:
unit LoginFrm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, SJCustomProperty, cxLookAndFeelPainters, PropStorageEh,
StdCtrls, cxButtons, ExtCtrls, cxControls, cxContainer, cxEdit, Registry,
cxTextEdit, cxMaskEdit, cxDropDownEdit, cxLookupEdit, cxDBLookupEdit,
cxDBLookupComboBox, cxDBEdit, fcLabel;
type
TfrmPropertyLogin = class(TSJCustomPropertyForm)
Label1: TLabel;
Label2: TLabel;
edtUser: TcxLookupComboBox;
edtPassword: TcxMaskEdit;
btnChangePassword: TcxButton;
labHint: TfcLabel;
Timer: TTimer;
Image1: TImage;
fcLabel39: TfcLabel;
procedure FormShow(Sender: TObject);
procedure TimerTimer(Sender: TObject);
procedure btnOKClick(Sender: TObject);
procedure btnChangePasswordClick(Sender: TObject);
procedure edtUserPropertiesEditValueChanged(Sender: TObject);
private
FIsFirstLogin: Boolean;
Fflag: Boolean;
FLoginCount: Integer;
public
{ Public declarations }
end;
var
frmPropertyLogin: TfrmPropertyLogin;
implementation
uses InvPrintDM, MainFrm, SJInvPrintGlobal, Encryption, sjUtils,
ChangePasswordFrm;
{$R *.dfm}
procedure TfrmPropertyLogin.FormShow(Sender: TObject);
// 顯示最后一次登錄的用戶名
begin
inherited;
with TRegistry.Create do
try
RootKey := HKEY_LOCAL_MACHINE;
if OpenKey(GREGsysPath, False) then
if ValueExists('Default User') then
begin
edtUser.EditValue := ReadString('Default User');
edtPassword.SetFocus;
end;
CloseKey;
finally
Free;
end;
// 默認為超級用戶
if edtUser.EditText = '' then
edtUser.EditValue := '00000';
FLoginCount := 1;
//edtUserPropertiesEditValueChanged(Sender);
edtPassword.SetFocus;
end;
procedure TfrmPropertyLogin.TimerTimer(Sender: TObject);
// 提示用戶更改密碼
begin
inherited;
Fflag := not Fflag;
if Fflag then
btnChangePassword.Font.Style := btnChangepassword.Font.Style + [fsBold]
else
btnChangePassword.Font.Style := btnChangepassword.Font.Style - [fsBold];
end;
procedure TfrmPropertyLogin.btnOKClick(Sender: TObject);
var
APassword: string;
begin
inherited;
// 對用戶輸入密碼進行校驗計數
if FLoginCount < gLoginCount then with dmInvPrint do
begin
Inc(FLoginCount);
// 檢查是否是系統默認的密碼或密碼為空
if (edtPassword.Text = GDefaultPassword) and FIsFirstLogin then
begin
ModalResult := mrOK;
Exit;
end;
// 校驗用戶密碼
try
if (Length(edtPassword.Text) = 0) and (Length(AtabUsers['Pwd']) = 0) then
begin
ModalResult := mrOK;
Exit;
end;
if edtPassword.Text = '' then
Apassword := ' '
else
Apassword := edtPassword.Text;
AtabUsers.Refresh;
if SimpleEnDecrypt(APassword, gKey) = AtabUsers['Pwd'] then
begin
// 用戶輸入了正確的密碼,退出登錄控制過程
ModalResult := mrOK;
Exit;
end else
// 用戶終止程序的運行
begin
ShowMessage('您輸入的口令不正確。');
edtPassword.SetFocus;
Exit;
end;
except
edtPassword.SetFocus;
Exit;
end;
end else // 非法用戶
begin
ShowMessage('你沒有取得正確的口令,請與系統管理員聯系。');
Application.Terminate;
end;
end;
procedure TfrmPropertyLogin.btnChangePasswordClick(Sender: TObject);
// 用戶修改密碼
var
APassword: string;
begin
inherited;
with TfrmPropertyChangePassword.Create(Application) do
try
labUser.Caption := edtUser.EditText;
UserID := dmInvPrint.AtabUsers['UserID'];
if ShowModal = mrOK then
begin
APassword := '';
if edtNewPassword.Text <> '' then
begin
APassword := SimpleEnDecrypt(edtNewPassword.Text, GKey);
end;
// 如果用戶輸入的密碼為空,則不對其進行加密轉換
dmInvPrint.ChangePassword(edtUser.EditValue, APassword);
Timer.Enabled := False;
labHint.Caption := '';
btnChangePassword.Font.Style := btnChangepassword.Font.Style - [fsBold];
end;
finally
Free;
end;
end;
procedure TfrmPropertyLogin.edtUserPropertiesEditValueChanged(
Sender: TObject);
// 檢查用戶密碼和用戶當前狀態
var
Avaliddays: Integer;
begin
inherited;
FIsFirstLogin := False;
Timer.Enabled := False;
labHint.Visible := False;
btnChangePassword.Font.Style := [];
if not dmInvPrint.AtabUsers.Locate('UserID', edtUser.EditValue, []) then
Exit;
// Check if the user has been locked
with dmInvPrint do
begin
if AtabUsers['Locked'] = True then
begin
ShowMessage('您的帳戶已經被鎖定,請與系統管理員聯系解除鎖定狀態!');
btnChangePassword.Enabled := False;
btnOk.Enabled := False;
Application.Terminate;
end;
// If a user is the first use this system, hint him change password
if (AtabUsers['Createdate'] = AtabUsers['LastChangedate'])
and (AtabUsers['LoginChange'] = True) then
begin
labHint.Visible := True;
labHint.Caption := '您是第一次使用系統,建議修改密碼';
FisFirstLogin := True;
Fflag := False;
Timer.Enabled := FIsFirstLogin;
Exit;
end;
// 檢查用戶密碼是否需要更新了
Avaliddays := AtabUsers['Validday']; // 如果密碼有效時間為0天則是永不過期設置
if Avaliddays = 0 then
Exit;
Avaliddays := AtabUsers['Validday'] - (Date - AtabUsers['LastChangedate']);
if Avaliddays < 0 then
begin
labHint.Visible := True;
labHint.Caption := '您的密碼已經過期,建議您修改密碼';
Fflag := False;
//btnChangePassword.Enabled := False;
//btnOk.Enabled := False;
Timer.Enabled := True;
end else if Avaliddays <= 7 then
begin
labHint.Visible := True;
labHint.Caption := Format('您的密碼還有%d天就要過期了', [Avaliddays]);
Fflag := False;
Timer.Enabled := True;
end;
// 更新用戶當前登錄時間
try
AtabUsers.Edit;
AtabUsers['LastLogindate'] := Now;
AtabUsers['LoginChange'] := False;
AtabUsers.Post;
except
// 保存失敗
end;
end;
end;
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -