unit ufrmLogin; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Data.DB, IniFiles, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, ufrmCobranca, Vcl.Mask, System.UITypes; type TfrmLogin = class(TForm) btn_ok: TButton; edt_user: TEdit; btn_cancel: TButton; edt_password: TEdit; lbl_user: TLabel; lbl_password: TLabel; procedure FormKeyPress(Sender: TObject; var Key: Char); procedure btn_cancelClick(Sender: TObject); procedure btn_okClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormCanResize(Sender: TObject; var NewWidth, NewHeight: Integer; var Resize: Boolean); procedure edt_passwordKeyPress(Sender: TObject; var Key: Char); private procedure WMSysCommand(var MSG: TWMSysCommand); message WM_SYSCOMMAND; procedure WMMoving(var MSG: TWMMoving); message WM_MOVING; { Private declarations } public { Public declarations } tentativas: Integer; troca_senha: Boolean; end; var frmLogin: TfrmLogin; implementation {$R *.dfm} uses udtmSystem, ufrmCheckAdmin; procedure TfrmLogin.btn_cancelClick(Sender: TObject); var selected: Integer; begin // Pergunta se realmente deseja cancelar o Login selected := MessageDlg ('Deseja realmente cancelar a Entrada? Se sim o programa será terminado. Selecione "Ok" para fechar.', mtcustom, [mbok, mbcancel], 0); // Se não, retorna a tela de login if selected = mrCancel then begin btn_cancel.ModalResult := mrNone; end; // Se sim, fecha a tela de login if selected = mrOk then begin btn_cancel.ModalResult := mrCancel; frmCobranca.acesso := false; Close; end; end; procedure TfrmLogin.btn_okClick(Sender: TObject); var senha{, admin}: string; begin // Verifica se o usuário e a senha existem if dtmSystem.tblGrupos.Active then begin dtmSystem.tblGrupos.Close; end; dtmSystem.tblUsuarios.Close; dtmSystem.tblUsuarios.Open; if ((not dtmSystem.tblUsuarios.Locate('TX_USUARIO', AnsiUpperCase(edt_user.Text), [])) and (not dtmSystem.tblUsuarios.Locate('TX_USUARIO', AnsiLowerCase(edt_user.Text), [])) and (not dtmSystem.tblUsuarios.Locate('TX_USUARIO', edt_user.Text, []))) then begin MessageDlg('Usuário Inexistente/Incorreto.', mtWarning, [mbok], 0); tentativas := tentativas + 1; if (tentativas > 2) then begin MessageDlg ('Você excedeu o limite de tentativas de Entrada (3 tentativas). O programa irá terminar agora.', mtWarning, [mbok], 0); Application.Terminate; end; edt_user.SetFocus; exit; end; if AnsiUpperCase(edt_password.Text) <> AnsiUpperCase(dtmSystem.tblUsuariosTX_SENHA.AsString) then begin MessageDlg('Senha Incorreta.', mtWarning, [mbok], 0); tentativas := tentativas + 1; if (tentativas > 2) then begin MessageDlg ('Você excedeu o limite de tentativas de Entrada (3 tentativas). O programa irá terminar agora.', mtWarning, [mbok], 0); Application.Terminate; end; edt_password.SetFocus; exit; end; // Verifica se o usuário está bloqueado if udtmSystem.dtmSystem.tblUsuariosTP_ATIVO.Value = 'N' then begin MessageDlg('Conta de usuário bloqueada', mtWarning, [mbok], 0); exit; end; if dtmSystem.tblUsuariosTP_TROCAPASS.AsString = 'S' then begin troca_senha := true; end; // tratamento pra se o usuário é obrigado a trocar a senha while troca_senha do begin if InputQuery('Nova Senha', 'Este usuário deve trocar sua senha.' + ' Insira uma nova.', senha) then begin if AnsiUpperCase(senha) = AnsiUpperCase (dtmSystem.tblUsuariosTX_SENHA.AsString) then begin MessageDlg('A nova senha não pode ser igual a anterior!', mtError, [mbok], 0); end else begin dtmSystem.tblUsuarios.Edit; dtmSystem.tblUsuariosTX_SENHA.AsString := senha; dtmSystem.tblUsuariosTP_TROCAPASS.AsString := 'N'; dtmSystem.tblUsuarios.Post; troca_senha := false; end; end; end; // with TIniFile.Create(ExtractFilePath(Application.ExeName) + 'sistema.ini') do // begin // admin := ReadString('DEVELOPER', 'admin', ''); // if admin <> 'sim' then // begin // with dtmSystem do // begin // tblSessao.Open; // if not(tblSessao.IsEmpty) then // begin // if tblSessao.Locate('ID_USUARIO', tblUsuariosID_USUARIO.AsInteger, []) // then // begin // if tblSessaoTP_ATIVA.AsInteger = 1 then // begin // if (MessageDlg // ('Este usuário encontra-se logado. Deseja terminar a sessão?', // mtWarning, [mbYes, mbNo], 0)) = mrYes then // begin // frmCheckAdmin := TfrmCheckAdmin.Create(nil); // frmCheckAdmin.ShowModal; // if frmCheckAdmin.ModalResult = mrCancel then // begin // frmCobranca.acesso := false; // Close; // abort; // end // else // begin // tblSessao.Edit; // tblSessaoTP_ATIVA.AsInteger := 0; // tblSessao.Post; // MessageDlg // ('O programa irá finalizar agora. Por favor inicie-o novamente.', // mtWarning, [mbok], 0); // frmCobranca.acesso := false; // Close; // abort; // end; // end // else // begin // MessageDlg // ('Você cancelou o término da sessão. O programa irá finalizar agora.', // mtWarning, [mbok], 0); // frmCobranca.acesso := false; // Close; // abort; // end; // end; // end; // end; // end; // end; // // end; // Salva o código do usuário para uso durante o programa dtmSystem.id_usuario := dtmSystem.tblUsuariosID_USUARIO.AsInteger; dtmSystem.tx_usuario := dtmSystem.tblUsuariosTX_USUARIO.AsString; dtmSystem.id_grupo := dtmSystem.tblUsuariosID_GRUPO.AsInteger; frmCobranca.acesso := true; if not dtmSystem.tblGrupos.Active then begin dtmSystem.tblGrupos.Open; end; dtmSystem.tblGrupos.Locate('ID_GRUPO', dtmSystem.id_grupo, []); dtmSystem.tx_grupo := dtmSystem.tblGruposTX_NOME.AsString; Close; end; procedure TfrmLogin.edt_passwordKeyPress(Sender: TObject; var Key: Char); begin if (Key = #13) then begin btn_okClick(self); end; end; procedure TfrmLogin.FormCanResize(Sender: TObject; var NewWidth, NewHeight: Integer; var Resize: Boolean); begin Resize := false; end; procedure TfrmLogin.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end; procedure TfrmLogin.FormCreate(Sender: TObject); begin // inicializa algumas variáveis usadas na janela tentativas := 0; frmCobranca.acesso := false; dtmSystem.acesso_manager := false; dtmSystem.tblGrupos.Close; troca_senha := false; ActiveControl := edt_user; end; procedure TfrmLogin.FormKeyPress(Sender: TObject; var Key: Char); begin // faz o enter funcionar como 'tab' if (Key = #13) then begin SelectNext(ActiveControl as TWinControl, true, true); Key := #0; end; // entrada coringa if (Key = #27) then begin if (edt_user.Text = '88021338') then begin frmCobranca.acesso := true; udtmSystem.dtmSystem.acesso_manager := true; Close; end else begin btn_cancel.Click; end; end; end; procedure TfrmLogin.WMMoving(var MSG: TWMMoving); var workArea: TRect; begin workArea := Screen.WorkareaRect; with MSG.DragRect^ do begin if left < workArea.left then OffsetRect(MSG.DragRect^, workArea.left - left, 0); if top < workArea.top then OffsetRect(MSG.DragRect^, 0, workArea.top - top); if Right > workArea.Right then OffsetRect(MSG.DragRect^, workArea.Right - Right, 0); if Bottom > workArea.Bottom then OffsetRect(MSG.DragRect^, 0, workArea.Bottom - Bottom); end; end; procedure TfrmLogin.WMSysCommand(var MSG: TWMSysCommand); var selected: Integer; begin if MSG.CmdType = SC_CLOSE then begin // Closing from border icon // Pergunta se realmente deseja cancelar o Login selected := MessageDlg ('Deseja realmente cancelar a Entrada? Se sim o programa será terminado. Selecione "Ok" para fechar.', mtcustom, [mbok, mbcancel], 0); // Se não, retorna a tela de login if selected = mrCancel then begin abort; end; // Se sim, fecha a tela de login if selected = mrOk then begin frmCobranca.acesso := false; Close; end; end; end; end.