Autor
Mensagem
estou abrindo um novo tópico pois não consigo responder no original...
primeiro:
para melhorar a segurança, NÃO avalie usuário e senha separadamente.
avaliar em conjunto dificulta o quebra via força-bruta, pois não dá pra saber o que foi digitado errado.
então sugiro que você mude sua avaliação para:
procedure TFrmLogin.BtnOKClick(Sender: TObject);
var
ValorSenha: TstringField;
begin
if not DM.tableusers.findkey([ednome.text]) or
(DM.tableUsers.fieldbyname('Senha').value<>edsenha.text) then
begin
pnlMensagem.Caption:='Login Recusado. Usuário ou Senha inválidos...';
inc(Contador);
if contador = 4 then // alcançou o limite de tentativas
frmPrincipal.close;
ednome.setfocus;
Exit;
end;
ValorSenha:=DM.tableUsers.findfield('Senha') as tStringfield;
frmPrincipal.label2.Caption := frmLogin.EdNome.Text;
frmPrincipal.enabled:=true;
frmlogin.release;
end;
segundo:
qual é o form principal da sua aplicação?
esta informação é essencial para poder te oferecer uma solução adequada.
primeiro:
para melhorar a segurança, NÃO avalie usuário e senha separadamente.
avaliar em conjunto dificulta o quebra via força-bruta, pois não dá pra saber o que foi digitado errado.
então sugiro que você mude sua avaliação para:
procedure TFrmLogin.BtnOKClick(Sender: TObject);
var
ValorSenha: TstringField;
begin
if not DM.tableusers.findkey([ednome.text]) or
(DM.tableUsers.fieldbyname('Senha').value<>edsenha.text) then
begin
pnlMensagem.Caption:='Login Recusado. Usuário ou Senha inválidos...';
inc(Contador);
if contador = 4 then // alcançou o limite de tentativas
frmPrincipal.close;
ednome.setfocus;
Exit;
end;
ValorSenha:=DM.tableUsers.findfield('Senha') as tStringfield;
frmPrincipal.label2.Caption := frmLogin.EdNome.Text;
frmPrincipal.enabled:=true;
frmlogin.release;
end;
segundo:
qual é o form principal da sua aplicação?
esta informação é essencial para poder te oferecer uma solução adequada.
Citação:
estou abrindo um novo tópico pois não consigo responder no original...
primeiro:
para melhorar a segurança, NÃO avalie usuário e senha separadamente.
avaliar em conjunto dificulta o quebra via força-bruta, pois não dá pra saber o que foi digitado errado.
então sugiro que você mude sua avaliação para:
procedure TFrmLogin.BtnOKClick(Sender: TObject);
var
ValorSenha: TstringField;
begin
if not DM.tableusers.findkey([ednome.text]) or
(DM.tableUsers.fieldbyname('Senha').value<>edsenha.text) then
begin
pnlMensagem.Caption:='Login Recusado. Usuário ou Senha inválidos...';
inc(Contador);
if contador = 4 then // alcançou o limite de tentativas
frmPrincipal.close;
ednome.setfocus;
Exit;
end;
ValorSenha:=DM.tableUsers.findfield('Senha') as tStringfield;
frmPrincipal.label2.Caption := frmLogin.EdNome.Text;
frmPrincipal.enabled:=true;
frmlogin.release;
end;
segundo:
qual é o form principal da sua aplicação?
esta informação é essencial para poder te oferecer uma solução adequada.
estou abrindo um novo tópico pois não consigo responder no original...
primeiro:
para melhorar a segurança, NÃO avalie usuário e senha separadamente.
avaliar em conjunto dificulta o quebra via força-bruta, pois não dá pra saber o que foi digitado errado.
então sugiro que você mude sua avaliação para:
procedure TFrmLogin.BtnOKClick(Sender: TObject);
var
ValorSenha: TstringField;
begin
if not DM.tableusers.findkey([ednome.text]) or
(DM.tableUsers.fieldbyname('Senha').value<>edsenha.text) then
begin
pnlMensagem.Caption:='Login Recusado. Usuário ou Senha inválidos...';
inc(Contador);
if contador = 4 then // alcançou o limite de tentativas
frmPrincipal.close;
ednome.setfocus;
Exit;
end;
ValorSenha:=DM.tableUsers.findfield('Senha') as tStringfield;
frmPrincipal.label2.Caption := frmLogin.EdNome.Text;
frmPrincipal.enabled:=true;
frmlogin.release;
end;
segundo:
qual é o form principal da sua aplicação?
esta informação é essencial para poder te oferecer uma solução adequada.
Ok, desculpe pela demora, estava arrumando minha máquina. O Form Principal é o frmPrincipal.
ok. pelo que eu entendi no seu código, você quer que quando a tela de login apareça, a tela principal desapareça. é isso mesmo? porque se for assim, você poderia apenas escondê-la, e não eliminá-la.
então eu faria assim:
no DPR (adicione Controls na uses):
begin
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Application.Run
else
Application.Terminate;
end.
no FrmLogin:
procedure TFrmLogin.BtnOKClick(Sender: TObject);
begin
try
if not DM.tableusers.findkey([ednome.text]) or
(DM.tableUsers.fieldbyname('Senha').value<>edsenha.text) then
begin
pnlMensagem.Caption:='Login Recusado. Usuário ou Senha inválidos...';
inc(Contador);
if contador = 4 then // alcançou o limite de tentativas
begin
Application.MessageBox('Número de tentativas esgotado. O sistema será fechado.',
'Login negado', MB_TASKMODAL + MB_OK + MB_ICONERROR);
ModalResult := mrCancel;
end
else
ednome.setfocus;
end
else
begin
frmPrincipal.label2.Caption := edNome.Text;
ModalResult := mrOk;
end;
except
// caso haja qualquer erro na avalição, sai do sistema
// para evitar acesso indevido
ModalResult := mrCancel;
end;
end;
no FrmPrincipal:
procedure TFrmPrincipal.mnuLogoffClick(Sender: TObject);
begin
Self.Visible := False;
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Self.Visible := True
else
Self.Close;
end;
então eu faria assim:
no DPR (adicione Controls na uses):
begin
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Application.Run
else
Application.Terminate;
end.
no FrmLogin:
procedure TFrmLogin.BtnOKClick(Sender: TObject);
begin
try
if not DM.tableusers.findkey([ednome.text]) or
(DM.tableUsers.fieldbyname('Senha').value<>edsenha.text) then
begin
pnlMensagem.Caption:='Login Recusado. Usuário ou Senha inválidos...';
inc(Contador);
if contador = 4 then // alcançou o limite de tentativas
begin
Application.MessageBox('Número de tentativas esgotado. O sistema será fechado.',
'Login negado', MB_TASKMODAL + MB_OK + MB_ICONERROR);
ModalResult := mrCancel;
end
else
ednome.setfocus;
end
else
begin
frmPrincipal.label2.Caption := edNome.Text;
ModalResult := mrOk;
end;
except
// caso haja qualquer erro na avalição, sai do sistema
// para evitar acesso indevido
ModalResult := mrCancel;
end;
end;
no FrmPrincipal:
procedure TFrmPrincipal.mnuLogoffClick(Sender: TObject);
begin
Self.Visible := False;
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Self.Visible := True
else
Self.Close;
end;





País: Brasil
Estado: RS
Cidade: Caxias do Sul
Mensagens: 1574
Citação:
ok. pelo que eu entendi no seu código, você quer que quando a tela de login apareça, a tela principal desapareça. é isso mesmo? porque se for assim, você poderia apenas escondê-la, e não eliminá-la.
então eu faria assim:
no DPR (adicione Controls na uses):
begin
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Application.Run
else
Application.Terminate;
end.
no FrmLogin:
procedure TFrmLogin.BtnOKClick(Sender: TObject);
begin
try
if not DM.tableusers.findkey([ednome.text]) or
(DM.tableUsers.fieldbyname('Senha').value<>edsenha.text) then
begin
pnlMensagem.Caption:='Login Recusado. Usuário ou Senha inválidos...';
inc(Contador);
if contador = 4 then // alcançou o limite de tentativas
begin
Application.MessageBox('Número de tentativas esgotado. O sistema será fechado.',
'Login negado', MB_TASKMODAL + MB_OK + MB_ICONERROR);
ModalResult := mrCancel;
end
else
ednome.setfocus;
end
else
begin
frmPrincipal.label2.Caption := edNome.Text;
ModalResult := mrOk;
end;
except
// caso haja qualquer erro na avalição, sai do sistema
// para evitar acesso indevido
ModalResult := mrCancel;
end;
end;
no FrmPrincipal:
procedure TFrmPrincipal.mnuLogoffClick(Sender: TObject);
begin
Self.Visible := False;
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Self.Visible := True
else
Self.Close;
end;
ok. pelo que eu entendi no seu código, você quer que quando a tela de login apareça, a tela principal desapareça. é isso mesmo? porque se for assim, você poderia apenas escondê-la, e não eliminá-la.
então eu faria assim:
no DPR (adicione Controls na uses):
begin
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Application.Run
else
Application.Terminate;
end.
no FrmLogin:
procedure TFrmLogin.BtnOKClick(Sender: TObject);
begin
try
if not DM.tableusers.findkey([ednome.text]) or
(DM.tableUsers.fieldbyname('Senha').value<>edsenha.text) then
begin
pnlMensagem.Caption:='Login Recusado. Usuário ou Senha inválidos...';
inc(Contador);
if contador = 4 then // alcançou o limite de tentativas
begin
Application.MessageBox('Número de tentativas esgotado. O sistema será fechado.',
'Login negado', MB_TASKMODAL + MB_OK + MB_ICONERROR);
ModalResult := mrCancel;
end
else
ednome.setfocus;
end
else
begin
frmPrincipal.label2.Caption := edNome.Text;
ModalResult := mrOk;
end;
except
// caso haja qualquer erro na avalição, sai do sistema
// para evitar acesso indevido
ModalResult := mrCancel;
end;
end;
no FrmPrincipal:
procedure TFrmPrincipal.mnuLogoffClick(Sender: TObject);
begin
Self.Visible := False;
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Self.Visible := True
else
Self.Close;
end;
você testou com as alterações acima ?
Citação:
você testou com as alterações acima ?
Citação:
ok. pelo que eu entendi no seu código, você quer que quando a tela de login apareça, a tela principal desapareça. é isso mesmo? porque se for assim, você poderia apenas escondê-la, e não eliminá-la.
então eu faria assim:
no DPR (adicione Controls na uses):
begin
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Application.Run
else
Application.Terminate;
end.
no FrmLogin:
procedure TFrmLogin.BtnOKClick(Sender: TObject);
begin
try
if not DM.tableusers.findkey([ednome.text]) or
(DM.tableUsers.fieldbyname('Senha').value<>edsenha.text) then
begin
pnlMensagem.Caption:='Login Recusado. Usuário ou Senha inválidos...';
inc(Contador);
if contador = 4 then // alcançou o limite de tentativas
begin
Application.MessageBox('Número de tentativas esgotado. O sistema será fechado.',
'Login negado', MB_TASKMODAL + MB_OK + MB_ICONERROR);
ModalResult := mrCancel;
end
else
ednome.setfocus;
end
else
begin
frmPrincipal.label2.Caption := edNome.Text;
ModalResult := mrOk;
end;
except
// caso haja qualquer erro na avalição, sai do sistema
// para evitar acesso indevido
ModalResult := mrCancel;
end;
end;
no FrmPrincipal:
procedure TFrmPrincipal.mnuLogoffClick(Sender: TObject);
begin
Self.Visible := False;
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Self.Visible := True
else
Self.Close;
end;
ok. pelo que eu entendi no seu código, você quer que quando a tela de login apareça, a tela principal desapareça. é isso mesmo? porque se for assim, você poderia apenas escondê-la, e não eliminá-la.
então eu faria assim:
no DPR (adicione Controls na uses):
begin
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Application.Run
else
Application.Terminate;
end.
no FrmLogin:
procedure TFrmLogin.BtnOKClick(Sender: TObject);
begin
try
if not DM.tableusers.findkey([ednome.text]) or
(DM.tableUsers.fieldbyname('Senha').value<>edsenha.text) then
begin
pnlMensagem.Caption:='Login Recusado. Usuário ou Senha inválidos...';
inc(Contador);
if contador = 4 then // alcançou o limite de tentativas
begin
Application.MessageBox('Número de tentativas esgotado. O sistema será fechado.',
'Login negado', MB_TASKMODAL + MB_OK + MB_ICONERROR);
ModalResult := mrCancel;
end
else
ednome.setfocus;
end
else
begin
frmPrincipal.label2.Caption := edNome.Text;
ModalResult := mrOk;
end;
except
// caso haja qualquer erro na avalição, sai do sistema
// para evitar acesso indevido
ModalResult := mrCancel;
end;
end;
no FrmPrincipal:
procedure TFrmPrincipal.mnuLogoffClick(Sender: TObject);
begin
Self.Visible := False;
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Self.Visible := True
else
Self.Close;
end;
você testou com as alterações acima ?
Vou fazer agora, um momento, ok?
Citação:
Vou fazer agora, um momento, ok?
Citação:
você testou com as alterações acima ?
Citação:
ok. pelo que eu entendi no seu código, você quer que quando a tela de login apareça, a tela principal desapareça. é isso mesmo? porque se for assim, você poderia apenas escondê-la, e não eliminá-la.
então eu faria assim:
no DPR (adicione Controls na uses):
begin
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Application.Run
else
Application.Terminate;
end.
no FrmLogin:
procedure TFrmLogin.BtnOKClick(Sender: TObject);
begin
try
if not DM.tableusers.findkey([ednome.text]) or
(DM.tableUsers.fieldbyname('Senha').value<>edsenha.text) then
begin
pnlMensagem.Caption:='Login Recusado. Usuário ou Senha inválidos...';
inc(Contador);
if contador = 4 then // alcançou o limite de tentativas
begin
Application.MessageBox('Número de tentativas esgotado. O sistema será fechado.',
'Login negado', MB_TASKMODAL + MB_OK + MB_ICONERROR);
ModalResult := mrCancel;
end
else
ednome.setfocus;
end
else
begin
frmPrincipal.label2.Caption := edNome.Text;
ModalResult := mrOk;
end;
except
// caso haja qualquer erro na avalição, sai do sistema
// para evitar acesso indevido
ModalResult := mrCancel;
end;
end;
no FrmPrincipal:
procedure TFrmPrincipal.mnuLogoffClick(Sender: TObject);
begin
Self.Visible := False;
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Self.Visible := True
else
Self.Close;
end;
ok. pelo que eu entendi no seu código, você quer que quando a tela de login apareça, a tela principal desapareça. é isso mesmo? porque se for assim, você poderia apenas escondê-la, e não eliminá-la.
então eu faria assim:
no DPR (adicione Controls na uses):
begin
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Application.Run
else
Application.Terminate;
end.
no FrmLogin:
procedure TFrmLogin.BtnOKClick(Sender: TObject);
begin
try
if not DM.tableusers.findkey([ednome.text]) or
(DM.tableUsers.fieldbyname('Senha').value<>edsenha.text) then
begin
pnlMensagem.Caption:='Login Recusado. Usuário ou Senha inválidos...';
inc(Contador);
if contador = 4 then // alcançou o limite de tentativas
begin
Application.MessageBox('Número de tentativas esgotado. O sistema será fechado.',
'Login negado', MB_TASKMODAL + MB_OK + MB_ICONERROR);
ModalResult := mrCancel;
end
else
ednome.setfocus;
end
else
begin
frmPrincipal.label2.Caption := edNome.Text;
ModalResult := mrOk;
end;
except
// caso haja qualquer erro na avalição, sai do sistema
// para evitar acesso indevido
ModalResult := mrCancel;
end;
end;
no FrmPrincipal:
procedure TFrmPrincipal.mnuLogoffClick(Sender: TObject);
begin
Self.Visible := False;
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Self.Visible := True
else
Self.Close;
end;
você testou com as alterações acima ?
Vou fazer agora, um momento, ok?
Tá dando erro nessa linha:
if FrmLogin.ShowModal = mrOk then
Citação:
Tá dando erro nessa linha:
if FrmLogin.ShowModal = mrOk then
Citação:
Vou fazer agora, um momento, ok?
Citação:
você testou com as alterações acima ?
Citação:
ok. pelo que eu entendi no seu código, você quer que quando a tela de login apareça, a tela principal desapareça. é isso mesmo? porque se for assim, você poderia apenas escondê-la, e não eliminá-la.
então eu faria assim:
no DPR (adicione Controls na uses):
begin
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Application.Run
else
Application.Terminate;
end.
no FrmLogin:
procedure TFrmLogin.BtnOKClick(Sender: TObject);
begin
try
if not DM.tableusers.findkey([ednome.text]) or
(DM.tableUsers.fieldbyname('Senha').value<>edsenha.text) then
begin
pnlMensagem.Caption:='Login Recusado. Usuário ou Senha inválidos...';
inc(Contador);
if contador = 4 then // alcançou o limite de tentativas
begin
Application.MessageBox('Número de tentativas esgotado. O sistema será fechado.',
'Login negado', MB_TASKMODAL + MB_OK + MB_ICONERROR);
ModalResult := mrCancel;
end
else
ednome.setfocus;
end
else
begin
frmPrincipal.label2.Caption := edNome.Text;
ModalResult := mrOk;
end;
except
// caso haja qualquer erro na avalição, sai do sistema
// para evitar acesso indevido
ModalResult := mrCancel;
end;
end;
no FrmPrincipal:
procedure TFrmPrincipal.mnuLogoffClick(Sender: TObject);
begin
Self.Visible := False;
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Self.Visible := True
else
Self.Close;
end;
ok. pelo que eu entendi no seu código, você quer que quando a tela de login apareça, a tela principal desapareça. é isso mesmo? porque se for assim, você poderia apenas escondê-la, e não eliminá-la.
então eu faria assim:
no DPR (adicione Controls na uses):
begin
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Application.Run
else
Application.Terminate;
end.
no FrmLogin:
procedure TFrmLogin.BtnOKClick(Sender: TObject);
begin
try
if not DM.tableusers.findkey([ednome.text]) or
(DM.tableUsers.fieldbyname('Senha').value<>edsenha.text) then
begin
pnlMensagem.Caption:='Login Recusado. Usuário ou Senha inválidos...';
inc(Contador);
if contador = 4 then // alcançou o limite de tentativas
begin
Application.MessageBox('Número de tentativas esgotado. O sistema será fechado.',
'Login negado', MB_TASKMODAL + MB_OK + MB_ICONERROR);
ModalResult := mrCancel;
end
else
ednome.setfocus;
end
else
begin
frmPrincipal.label2.Caption := edNome.Text;
ModalResult := mrOk;
end;
except
// caso haja qualquer erro na avalição, sai do sistema
// para evitar acesso indevido
ModalResult := mrCancel;
end;
end;
no FrmPrincipal:
procedure TFrmPrincipal.mnuLogoffClick(Sender: TObject);
begin
Self.Visible := False;
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Self.Visible := True
else
Self.Close;
end;
você testou com as alterações acima ?
Vou fazer agora, um momento, ok?
Tá dando erro nessa linha:
if FrmLogin.ShowModal = mrOk then
Deu erro agora nessa linha:
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
A uses ta assim:
program Parte2;
uses
Forms,
Controls,
UnitPrincipal in 'UnitPrincipal.pas' {FrmPrincipal},
UnitLogin in 'UnitLogin.pas' {FrmLogin},
UnitDM in 'UnitDM.pas' {DM: TDataModule},
UnitSenhas in 'UnitSenhas.pas' {FrmSenhas};
{$R *.RES}
begin
// Application.Initialize;
// Application.CreateForm(TFrmPrincipal, FrmPrincipal);
// Application.CreateForm(TDM, DM);
// Application.Run;
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Application.Run
else
Application.Terminate;
end.
Não sei mais o que fazer.
Citação:

Deu erro agora nessa linha:
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
A uses ta assim:
program Parte2;
uses
Forms,
Controls,
UnitPrincipal in 'UnitPrincipal.pas' {FrmPrincipal},
UnitLogin in 'UnitLogin.pas' {FrmLogin},
UnitDM in 'UnitDM.pas' {DM: TDataModule},
UnitSenhas in 'UnitSenhas.pas' {FrmSenhas};
{$R *.RES}
begin
// Application.Initialize;
// Application.CreateForm(TFrmPrincipal, FrmPrincipal);
// Application.CreateForm(TDM, DM);
// Application.Run;
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Application.Run
else
Application.Terminate;
end.
Não sei mais o que fazer.
Citação:
Tá dando erro nessa linha:
if FrmLogin.ShowModal = mrOk then
Citação:
Vou fazer agora, um momento, ok?
Citação:
você testou com as alterações acima ?
Citação:
ok. pelo que eu entendi no seu código, você quer que quando a tela de login apareça, a tela principal desapareça. é isso mesmo? porque se for assim, você poderia apenas escondê-la, e não eliminá-la.
então eu faria assim:
no DPR (adicione Controls na uses):
begin
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Application.Run
else
Application.Terminate;
end.
no FrmLogin:
procedure TFrmLogin.BtnOKClick(Sender: TObject);
begin
try
if not DM.tableusers.findkey([ednome.text]) or
(DM.tableUsers.fieldbyname('Senha').value<>edsenha.text) then
begin
pnlMensagem.Caption:='Login Recusado. Usuário ou Senha inválidos...';
inc(Contador);
if contador = 4 then // alcançou o limite de tentativas
begin
Application.MessageBox('Número de tentativas esgotado. O sistema será fechado.',
'Login negado', MB_TASKMODAL + MB_OK + MB_ICONERROR);
ModalResult := mrCancel;
end
else
ednome.setfocus;
end
else
begin
frmPrincipal.label2.Caption := edNome.Text;
ModalResult := mrOk;
end;
except
// caso haja qualquer erro na avalição, sai do sistema
// para evitar acesso indevido
ModalResult := mrCancel;
end;
end;
no FrmPrincipal:
procedure TFrmPrincipal.mnuLogoffClick(Sender: TObject);
begin
Self.Visible := False;
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Self.Visible := True
else
Self.Close;
end;
ok. pelo que eu entendi no seu código, você quer que quando a tela de login apareça, a tela principal desapareça. é isso mesmo? porque se for assim, você poderia apenas escondê-la, e não eliminá-la.
então eu faria assim:
no DPR (adicione Controls na uses):
begin
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Application.Run
else
Application.Terminate;
end.
no FrmLogin:
procedure TFrmLogin.BtnOKClick(Sender: TObject);
begin
try
if not DM.tableusers.findkey([ednome.text]) or
(DM.tableUsers.fieldbyname('Senha').value<>edsenha.text) then
begin
pnlMensagem.Caption:='Login Recusado. Usuário ou Senha inválidos...';
inc(Contador);
if contador = 4 then // alcançou o limite de tentativas
begin
Application.MessageBox('Número de tentativas esgotado. O sistema será fechado.',
'Login negado', MB_TASKMODAL + MB_OK + MB_ICONERROR);
ModalResult := mrCancel;
end
else
ednome.setfocus;
end
else
begin
frmPrincipal.label2.Caption := edNome.Text;
ModalResult := mrOk;
end;
except
// caso haja qualquer erro na avalição, sai do sistema
// para evitar acesso indevido
ModalResult := mrCancel;
end;
end;
no FrmPrincipal:
procedure TFrmPrincipal.mnuLogoffClick(Sender: TObject);
begin
Self.Visible := False;
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Self.Visible := True
else
Self.Close;
end;
você testou com as alterações acima ?
Vou fazer agora, um momento, ok?
Tá dando erro nessa linha:
if FrmLogin.ShowModal = mrOk then
Deu erro agora nessa linha:
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
A uses ta assim:
program Parte2;
uses
Forms,
Controls,
UnitPrincipal in 'UnitPrincipal.pas' {FrmPrincipal},
UnitLogin in 'UnitLogin.pas' {FrmLogin},
UnitDM in 'UnitDM.pas' {DM: TDataModule},
UnitSenhas in 'UnitSenhas.pas' {FrmSenhas};
{$R *.RES}
begin
// Application.Initialize;
// Application.CreateForm(TFrmPrincipal, FrmPrincipal);
// Application.CreateForm(TDM, DM);
// Application.Run;
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
Application.CreateForm(TFrmLogin, FrmLogin);
if FrmLogin.ShowModal = mrOk then
Application.Run
else
Application.Terminate;
end.
Não sei mais o que fazer.
Fiz essas modificações e continua dando erro.
Fiz uma mudança e o erro acima sumiu:
De: Application.CreateForm(TDM, DM);
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
Para: Application.CreateForm(TFrmPrincipal, FrmPrincipal);
Application.CreateForm(TDM, DM);
Ahh, e o procedimento no botão OK no FrmLogin não entra no form Principal, entro com o login e senha e fica só na tela de login.
Citação:
Consegue me mandar ainda hoje? Estou parado nisso.
Citação:
isso deve acontecer porque seu frmprincipal não está marcado como formulário principal da aplicação.
se você puder me passar seu projeto, com essas três units (principal, login, dm), posso tentar resolver o problema.
emerson.en@gmail.com
isso deve acontecer porque seu frmprincipal não está marcado como formulário principal da aplicação.
se você puder me passar seu projeto, com essas três units (principal, login, dm), posso tentar resolver o problema.
emerson.en@gmail.com
Consegue me mandar ainda hoje? Estou parado nisso.
Acabei de enviar.
fiz exatamente como no exemplo que eu te passei.
só uma coisa não havia sido explicada por você:
do DM havia o seguinte código:
procedure TDM.DMCreate(Sender: TObject);
begin
frmprincipal.show;
frmLogin:=TfrmLogin.create(self);
frmlogin.show;
end;
totalmente DESnecessário. retirei do fonte.
estava meio bagunçado: os formulários eram criados e destruídos em vários locais do seu programa.
te enviei o fonte corrigido.
só uma coisa não havia sido explicada por você:
do DM havia o seguinte código:
procedure TDM.DMCreate(Sender: TObject);
begin
frmprincipal.show;
frmLogin:=TfrmLogin.create(self);
frmlogin.show;
end;
totalmente DESnecessário. retirei do fonte.
estava meio bagunçado: os formulários eram criados e destruídos em vários locais do seu programa.
te enviei o fonte corrigido.
Citação:
fiz exatamente como no exemplo que eu te passei.
só uma coisa não havia sido explicada por você:
do DM havia o seguinte código:
procedure TDM.DMCreate(Sender: TObject);
begin
frmprincipal.show;
frmLogin:=TfrmLogin.create(self);
frmlogin.show;
end;
totalmente DESnecessário. retirei do fonte.
estava meio bagunçado: os formulários eram criados e destruídos em vários locais do seu programa.
te enviei o fonte corrigido.
fiz exatamente como no exemplo que eu te passei.
só uma coisa não havia sido explicada por você:
do DM havia o seguinte código:
procedure TDM.DMCreate(Sender: TObject);
begin
frmprincipal.show;
frmLogin:=TfrmLogin.create(self);
frmlogin.show;
end;
totalmente DESnecessário. retirei do fonte.
estava meio bagunçado: os formulários eram criados e destruídos em vários locais do seu programa.
te enviei o fonte corrigido.
Não recebi, Emerson. Pode enviar novamente?
Citação:
Não recebi, Emerson. Pode enviar novamente?
Citação:
fiz exatamente como no exemplo que eu te passei.
só uma coisa não havia sido explicada por você:
do DM havia o seguinte código:
procedure TDM.DMCreate(Sender: TObject);
begin
frmprincipal.show;
frmLogin:=TfrmLogin.create(self);
frmlogin.show;
end;
totalmente DESnecessário. retirei do fonte.
estava meio bagunçado: os formulários eram criados e destruídos em vários locais do seu programa.
te enviei o fonte corrigido.
fiz exatamente como no exemplo que eu te passei.
só uma coisa não havia sido explicada por você:
do DM havia o seguinte código:
procedure TDM.DMCreate(Sender: TObject);
begin
frmprincipal.show;
frmLogin:=TfrmLogin.create(self);
frmlogin.show;
end;
totalmente DESnecessário. retirei do fonte.
estava meio bagunçado: os formulários eram criados e destruídos em vários locais do seu programa.
te enviei o fonte corrigido.
Não recebi, Emerson. Pode enviar novamente?
Emerson, funcionou perfeitamente. Como faço para o form principal aparecer no fundo, caso queira fazer assim?
o primeiro login eu creio que deva aparecer antes da tela principal, porém para o logoff acho que a tela principal deveria ficar aparecendo ao fundo.
para isso, altere apenas o procedimento do logoff, de modo a ficar assim:
procedure TFrmPrincipal.mnuLogoffClick(Sender: TObject);
begin
if TFrmLogin.ChamaLogin <> mrOk then
begin
lFecha := True;
Self.Close;
end;
end;
para isso, altere apenas o procedimento do logoff, de modo a ficar assim:
procedure TFrmPrincipal.mnuLogoffClick(Sender: TObject);
begin
if TFrmLogin.ChamaLogin <> mrOk then
begin
lFecha := True;
Self.Close;
end;
end;
Citação:
o primeiro login eu creio que deva aparecer antes da tela principal, porém para o logoff acho que a tela principal deveria ficar aparecendo ao fundo.
para isso, altere apenas o procedimento do logoff, de modo a ficar assim:
procedure TFrmPrincipal.mnuLogoffClick(Sender: TObject);
begin
if TFrmLogin.ChamaLogin <> mrOk then
begin
lFecha := True;
Self.Close;
end;
end;
o primeiro login eu creio que deva aparecer antes da tela principal, porém para o logoff acho que a tela principal deveria ficar aparecendo ao fundo.
para isso, altere apenas o procedimento do logoff, de modo a ficar assim:
procedure TFrmPrincipal.mnuLogoffClick(Sender: TObject);
begin
if TFrmLogin.ChamaLogin <> mrOk then
begin
lFecha := True;
Self.Close;
end;
end;
Ok, caso queira que o form principal apareça de fundo no primeiro login também, dá para fazer? Essa é para encerrar.
altere o DPR, de modo a ficar assim:
begin
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
FrmPrincipal.Show; // acrescente esta linha
if TFrmLogin.ChamaLogin = mrOk then
Application.Run
else
Application.Terminate;
end.
begin
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
FrmPrincipal.Show; // acrescente esta linha
if TFrmLogin.ChamaLogin = mrOk then
Application.Run
else
Application.Terminate;
end.
Citação:
altere o DPR, de modo a ficar assim:
begin
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
FrmPrincipal.Show; // acrescente esta linha
if TFrmLogin.ChamaLogin = mrOk then
Application.Run
else
Application.Terminate;
end.
altere o DPR, de modo a ficar assim:
begin
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
FrmPrincipal.Show; // acrescente esta linha
if TFrmLogin.ChamaLogin = mrOk then
Application.Run
else
Application.Terminate;
end.
Ok, vou testar. Obrigado por enquanto.
Citação:
Ok, vou testar. Obrigado por enquanto.
Citação:
altere o DPR, de modo a ficar assim:
begin
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
FrmPrincipal.Show; // acrescente esta linha
if TFrmLogin.ChamaLogin = mrOk then
Application.Run
else
Application.Terminate;
end.
altere o DPR, de modo a ficar assim:
begin
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
FrmPrincipal.Show; // acrescente esta linha
if TFrmLogin.ChamaLogin = mrOk then
Application.Run
else
Application.Terminate;
end.
Ok, vou testar. Obrigado por enquanto.
Funcionou perfeito. Agora posso dar contiuidade. Obrigado Emerson.
Citação:
Funcionou perfeito. Agora posso dar contiuidade. Obrigado Emerson.
Citação:
Ok, vou testar. Obrigado por enquanto.
Citação:
altere o DPR, de modo a ficar assim:
begin
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
FrmPrincipal.Show; // acrescente esta linha
if TFrmLogin.ChamaLogin = mrOk then
Application.Run
else
Application.Terminate;
end.
altere o DPR, de modo a ficar assim:
begin
Application.Initialize;
Application.CreateForm(TDM, DM);
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
FrmPrincipal.Show; // acrescente esta linha
if TFrmLogin.ChamaLogin = mrOk then
Application.Run
else
Application.Terminate;
end.
Ok, vou testar. Obrigado por enquanto.
Funcionou perfeito. Agora posso dar contiuidade. Obrigado Emerson.
Está estranho. Estou querendo fazer um perfil de usuários aqui, mas está deixando fazer com qualquer um que loga. Vc teria um exemplo ou melhorar esse?






