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

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.