unit uUserLogin; interface uses SysUtils, Types, Classes, Variants, QTypes, QGraphics, QControls, QForms, QDialogs, QStdCtrls, QButtons, QExtCtrls, Libc, uPublic, QMenus, SQLite3, SQLiteTable3; type TfrmUserLogin = class(TForm) MainMenu1: TMainMenu; N11: TMenuItem; N21: TMenuItem; N31: TMenuItem; Edit1: TEdit; Label3: TLabel; BitBtn1: TBitBtn; BitBtn2: TBitBtn; Label4: TLabel; Timer1: TTimer; procedure Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure BitBtn1Click(Sender: TObject); procedure BitBtn2Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure CRC_CPCC(var pucData: TResultByteArray; nLen: integer;var pCRC: string); procedure CALC_CODE(); procedure Timer1Timer(Sender: TObject); procedure N21Click(Sender: TObject); procedure N31Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var frmUserLogin: TfrmUserLogin; ToChange : Integer; lastDate : string; fStream : TFileStream; userDB : TSQLiteDatabase; userTB : TSQLiteTable; implementation uses DESCrypt, uEnCode; {$R *.xfm} procedure TfrmUserLogin.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (key = 4100) or (key = 4101) then BitBtn1.Click; if key = 4096 then BitBtn2.Click; end; procedure TfrmUserLogin.BitBtn1Click(Sender: TObject); var str : string; buffer : array[1..100] of char; begin //fStream := TFILESTREAM.Create('code.dat',fmcreate); { fStream := TFILESTREAM.Create('code.dat',fmOpenReadWrite); fStream.Position := 0; fStream.Read(buffer,fStream.Size); if fStream.size = 0 then begin str := ''; end else begin str := StrPas(@buffer); end; FreeAndNil(fStream); } userDB := TSQLiteDatabase.Create(AnsiToUTF8(_GetDBPath + 'code.db')); userTB := userDB.GetTable('select password from user where name = 1001 '); if userTB.RowCount = 0 then begin str := ''; end else begin str := userTB.FieldByName['password']; end; if (edit1.Text = str) and (str <> '') then begin //Self.Close; //FrmEnCode := TFrmEnCode.Create(nil); //FrmEnCode.ShowModal; bitbtn1.Visible := FALSE; edit1.ReadOnly := TRUE; edit1.echomode := emNormal; label3.caption := 'Ëæ»úÃÜÂë:'; label4.visible := FALSE; bitbtn2.caption := 'Í˳ö'; mainmenu1.items.Items[0].Visible := TRUE; ToChange := 0; CALC_CODE; timer1.Enabled := TRUE; end else begin if bitbtn1.visible = TRUE then begin _MsgError('ÃÜÂë´íÎó£¡'); edit1.setfocus; exit; end; end; end; procedure TfrmUserLogin.BitBtn2Click(Sender: TObject); begin application.Terminate; exit; end; procedure TfrmUserLogin.FormCreate(Sender: TObject); begin mainmenu1.items.Items[0].Visible := FALSE; frmUserLogin.Timer1.Enabled := FALSE; edit1.SetFocus; end; procedure TfrmUserLogin.CRC_CPCC(var pucData: TResultByteArray; nLen: integer; var pCRC: string); var CRC16Lo, CRC16Hi, CH, CL, SaveHi, SaveLo, i, j: byte; begin CRC16Lo := 0; // pCRC-(pCRC div 256)*256; CRC16Hi := 0; //(pCRC div 256); ch := $A0; cl := $01; for i := 0 to nLen - 1 do begin CRC16Lo := CRC16Lo xor (pucData[i]); for j := 0 to 7 do begin SaveHi := CRC16Hi; SaveLo := CRC16Lo; CRC16Hi := CRC16Hi shr 1; CRC16Lo := CRC16Lo shr 1; if (SaveHi and $01) = $01 then CRC16Lo := CRC16Lo or $80; if (SaveLo and $01) = $01 then begin CRC16Hi := CRC16Hi xor CH; CRC16Lo := CRC16Lo xor CL; end; end; end; pCRC := IntToHex(CRC16hi, 2) + IntToHex(CRC16Lo, 2); end; procedure TfrmUserLogin.CALC_CODE(); var AR: TResultByteArray; CRC: string; nCode: INTEGER; nTmp: INTEGER; _code: string; date: string; i: integer; C: array[1..4] of INTEGER; begin SetLength(ar, 10); ar[0] := $BD; ar[1] := $6E; ar[2] := $3F; ar[3] := $91; ar[4] := $4C; ar[5] := $2A; date := formatdatetime('yyyyMMdd', now); lastDate := date; ar[6] := StrToInt('$' + copy(date, 1, 2)); ar[7] := StrToInt('$' + copy(date, 3, 2)); ar[8] := StrToInt('$' + copy(date, 5, 2)); ar[9] := StrToInt('$' + copy(date, 7, 2)); CRC_CPCC(ar, length(ar), CRC); nTmp := StrToInt(copy(date, 8, 1)); nTmp := nTmp mod 2; for i := 1 to 4 do begin c[i] := StrToInt('$' + copy(CRC, i, 1)); if c[i] > 9 then begin if nTmp = 0 then begin c[i] := c[i] - 6; end else begin c[i] := c[i] - 9; end; end; end; CRC := IntToStr(c[1]) +IntToStr(c[2]) +IntToStr(c[3]) +IntToStr(c[4]); edit1.Text := CRC; ToChange := 0; end; procedure TfrmUserLogin.Timer1Timer(Sender: TObject); var date : string; begin date := formatdatetime('yyyyMMdd', now); if lastDate <> date then begin calc_code; end; { if (ToChange = 0) and (date > '235500') and (date < '235959') then begin ToChange := 1; end; if (ToChange = 1) and (date > '000000') and (date < '000500') then begin calc_code; end; } end; procedure TfrmUserLogin.N21Click(Sender: TObject); begin Application.CreateForm(TFrmEnCode, FrmEnCode); FrmEnCode.ShowModal; end; procedure TfrmUserLogin.N31Click(Sender: TObject); begin application.Terminate; exit; end; end. . .