unit DDeleteCode; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, System.ImageList, Vcl.ImgList, PngImageList, Vcl.Imaging.pngimage, Vcl.ExtCtrls, WindowAnimator, Vcl.Buttons; const DEF_WIDTH = 397; EXT_WIDTH = 237; type TDlgDeleteCode = class(TForm) Label1: TLabel; btnOk: TButton; btnCancel: TButton; Label2: TLabel; edAuthCode1: TEdit; edAuthCode2: TEdit; edAuthCode3: TEdit; edAuthCode4: TEdit; edAuthCode5: TEdit; edAuthCode6: TEdit; edAuthCode7: TEdit; edAuthCode8: TEdit; lbDelCode: TLabel; procedure btnOkClick(Sender: TObject); procedure btnCancelClick(Sender: TObject); procedure Label2DblClick(Sender: TObject); procedure edAuthCode1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure edAuthCode8KeyPress(Sender: TObject; var Key: Char); private { Private declarations } sCode_, sAuth_: String; nAuthFailCnt_: Integer; procedure InitCode(bMakeCode: Boolean = false); procedure ClearAuthEdit; public { Public declarations } Constructor Create(aOwner: TComponent); override; procedure CreateParams(var Params: TCreateParams); override; // 작업표시줄에 표시 end; var DlgDeleteCode: TDlgDeleteCode; implementation uses ManagerService, System.Math, CrmLogger, Tocsg.Strings, GlobalDefine, Tocsg.DateTime, Tocsg.Hash; const CODE_KEY = 'BsOneFixedKey'; resourcestring RS_InputAuth = '인증키를 입력해주십시오.'; RS_InvalidAuth = '유효하지 않은 인증키 입니다.'; RS_InputCode = '인증코드를 입력해 주십시오.'; RS_ErrorLength = '인증코드 길이 오류입니다.'; RS_Fail3 = '인증을 3회 실패했습니다.'; RS_CodeClear = '인증 및 코드 생성을 초기화 합니다.'; RS_InvalidCode = '유효하지 않은 인증코드입니다. (초기화 : %d)'; {$R *.dfm} Constructor TDlgDeleteCode.Create(aOwner: TComponent); begin Inherited Create(aOwner); sAuth_ := ''; nAuthFailCnt_ := 0; InitCode; end; procedure TDlgDeleteCode.InitCode(bMakeCode: Boolean = false); var sTemp: String; begin sCode_ := gMgSvc.AgentModel.DeleteCode; if (sCode_ = '') or bMakeCode then begin gMgSvc.AgentModel.DeleteCode := GetRandomStrEx(8); gMgSvc.AgentModel.Save; sCode_ := gMgSvc.AgentModel.DeleteCode; end; ASSERT(sCode_.Length = 8); lbDelCode.Caption := Format('%s %s %s %s %s %s %s %s', [sCode_[1], sCode_[2], sCode_[3], sCode_[4], sCode_[5], sCode_[6], sCode_[7], sCode_[8]]); sTemp := ConvStrToSha256A(sCode_ + CODE_KEY + gMgSvc.EmpNo); sTemp := ExtrNumStr(sTemp); sAuth_ := Copy(sTemp, sTemp.Length - 3, 4) + Copy(sTemp, 1, 4); end; procedure TDlgDeleteCode.Label2DblClick(Sender: TObject); var ShiftState: TShiftState; begin ShiftState := KeyDataToShiftState(0); if GetKeyState(VK_LMENU) < 0 then Include(ShiftState, ssAlt); if (ssShift in ShiftState) and (ssAlt in ShiftState) and (ssCtrl in ShiftState) then begin ShowMessage(sAuth_); end; end; procedure TDlgDeleteCode.ClearAuthEdit; begin edAuthCode1.Text := ''; edAuthCode2.Text := ''; edAuthCode3.Text := ''; edAuthCode4.Text := ''; edAuthCode5.Text := ''; edAuthCode6.Text := ''; edAuthCode7.Text := ''; edAuthCode8.Text := ''; end; procedure TDlgDeleteCode.CreateParams(var Params: TCreateParams); begin Inherited CreateParams(Params); Params.ExStyle := WS_EX_APPWINDOW; end; procedure TDlgDeleteCode.edAuthCode1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = 8 then begin if (Sender is TEdit) and (TEdit(Sender).Text = '') then begin if Sender = edAuthCode2 then edAuthCode1.SetFocus else if Sender = edAuthCode3 then edAuthCode2.SetFocus else if Sender = edAuthCode4 then edAuthCode3.SetFocus else if Sender = edAuthCode5 then edAuthCode4.SetFocus else if Sender = edAuthCode6 then edAuthCode5.SetFocus else if Sender = edAuthCode7 then edAuthCode6.SetFocus else if Sender = edAuthCode8 then edAuthCode7.SetFocus; end; end else begin if Sender = edAuthCode1 then edAuthCode2.SetFocus else if Sender = edAuthCode2 then edAuthCode3.SetFocus else if Sender = edAuthCode3 then edAuthCode4.SetFocus else if Sender = edAuthCode4 then edAuthCode5.SetFocus else if Sender = edAuthCode5 then edAuthCode6.SetFocus else if Sender = edAuthCode6 then edAuthCode7.SetFocus else if Sender = edAuthCode7 then edAuthCode8.SetFocus; end; end; procedure TDlgDeleteCode.edAuthCode8KeyPress(Sender: TObject; var Key: Char); begin if Key = #13 then begin Key := #0; btnOk.Click; end; end; procedure TDlgDeleteCode.btnCancelClick(Sender: TObject); begin Close; end; procedure TDlgDeleteCode.btnOkClick(Sender: TObject); var sAuth: String; ExpFun: TExpFun; begin if edAuthCode1.Text = '' then begin MessageBox(Handle, PChar(RS_InputCode), PChar(Caption), MB_ICONWARNING or MB_OK); edAuthCode1.SetFocus; exit; end; if edAuthCode2.Text = '' then begin MessageBox(Handle, PChar(RS_InputCode), PChar(Caption), MB_ICONWARNING or MB_OK); edAuthCode2.SetFocus; exit; end; if edAuthCode3.Text = '' then begin MessageBox(Handle, PChar(RS_InputCode), PChar(Caption), MB_ICONWARNING or MB_OK); edAuthCode3.SetFocus; exit; end; if edAuthCode4.Text = '' then begin MessageBox(Handle, PChar(RS_InputCode), PChar(Caption), MB_ICONWARNING or MB_OK); edAuthCode4.SetFocus; exit; end; if edAuthCode5.Text = '' then begin MessageBox(Handle, PChar(RS_InputCode), PChar(Caption), MB_ICONWARNING or MB_OK); edAuthCode5.SetFocus; exit; end; if edAuthCode6.Text = '' then begin MessageBox(Handle, PChar(RS_InputCode), PChar(Caption), MB_ICONWARNING or MB_OK); edAuthCode6.SetFocus; exit; end; if edAuthCode7.Text = '' then begin MessageBox(Handle, PChar(RS_InputCode), PChar(Caption), MB_ICONWARNING or MB_OK); edAuthCode7.SetFocus; exit; end; if edAuthCode8.Text = '' then begin MessageBox(Handle, PChar(RS_InputCode), PChar(Caption), MB_ICONWARNING or MB_OK); edAuthCode8.SetFocus; exit; end; sAuth := edAuthCode1.Text + edAuthCode2.Text + edAuthCode3.Text + edAuthCode4.Text + edAuthCode5.Text + edAuthCode6.Text + edAuthCode7.Text + edAuthCode8.Text; if sAuth.Length <> 8 then begin MessageBox(Handle, PChar(RS_ErrorLength), PChar(Caption), MB_ICONWARNING or MB_OK); exit; end; if sAuth <> sAuth_ then begin if nAuthFailCnt_ = 3 then begin nAuthFailCnt_ := 0; MessageBox(Handle, PChar(RS_Fail3+#13+#10+RS_CodeClear), PChar(Caption), MB_ICONWARNING or MB_OK); InitCode(true); end else begin MessageBox(Handle, PChar(Format(RS_InvalidCode, [3 - nAuthFailCnt_])), PChar(Caption), MB_ICONWARNING or MB_OK); Inc(nAuthFailCnt_); end; ClearAuthEdit; edAuthCode1.SetFocus; exit; end; ModalResult := mrOk; end; end.