You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
328 lines
8.3 KiB
328 lines
8.3 KiB
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.
|