Fechar Tela de Login
11/03/2006
0
Antes de mais nada, sei que este tópico foi abordado em várias oportunidades, por isso pesquisei primeiro e coloquei em questão novamente, pois não encontrei a solução.
Quando executo o programa, é carregada a tela de login. Fiz a rotina básica (verificação de login e senha) e criei uma variável que recebe o nome de quem está logando (foi criada como variável pública), pois utilizo-a em outras telas. Seguindo a lógica, quando usuário e senha estiverem corretos, a tela principal é carregada na memória e a de login é apagada. Isso lembra o processo de criação de uma tela de splash, a diferença é que há uma condição (login/senha corretos), conforme dito anteriormente.
Eu não sei se o que estou querendo fazer é possível, pois tem um detalhe importante, há uma variável pública, como disse no início, e o seu conteúdo é utilizado em outro lugar, se apagar a tela de login da memória, este valor será apagado também.
Gostaria de saber se há uma solução, pois tentei várias alternativas, através deste fórum, e não obtive sucesso.
Desde já agradeço pela atenção.
Um abraço a todos...
Roger1976
Posts
11/03/2006
Aerreira
Depois, quando o form principal abre, eu tenho outra variável para armazenar o nome do usuário, atribuo a ela então o valor da variável lá do data-module. Pronto. A partir de qualquer form da aplicação busco o nome do usuário atual a partir da variavel do form principal.
13/03/2006
Paulocesar1301
No OnActivate do sem form principal, teste se é a primeira carga e se positivo, destrua seu form de login (FreeAndNil(SeuForm)).
Obs.: eu colocaria uma progressbar ou algo do gênero no form de login, assim enquanto os parâmetros do seu form principal são carregados, o usuário sabe o que está acontecendo.
16/03/2006
Roger1976
Em relação à variável, funcionou blz....
O que pegou foi o form. A única solução que eu encontrei, depois de vários testes, foi a seguinte:
No dpr...
begin
Application.Initialize;
Application.CreateForm(Tdm, dm);
Application.CreateForm(TfrmPrincipal, frmPrincipal);
FreeAndNil(frmLogin);
Application.Run;
end.
No oncreate do form principal...
try
frmLogin := tfrmLogin.Create(Application);
frmLogin.ShowModal;
finally
FreeAndNil(frmLogin);
end;
No botão ok do form login...
if (edtLogin.Text = ´´) and (edtSenha.Text = ´´) then
begin
ShowMessage(´Informe o login e a senha: ´);
edtLogin.SetFocus;
end
else
begin
with dm.cdsAutenticaLogin do
begin
close;
Params.ParamByName(´LOGIN´).AsString := edtLogin.Text;
Params.ParamByName(´SENHA´).AsString := edtSenha.Text;
open;
if not isempty then
begin
dm.NomeUsuario := FieldByName(´NOME´).AsString;
frmPrincipal.Show;
hide; // eu não consegui excluir o form da memória, por isso estou ocultando...
end
else
begin
ShowMessage(´Login/Senha incorretos´);
edtLogin.SetFocus;
end
end;
end;
No ondestroy do form principal
Application.Terminate;
Não sei se é a melhor solução, por isso, mais uma vez, peço a opinião de vcs...
Obrigado!!!!
16/03/2006
Roger1976
07/08/2015
Joel Alves
07/08/2015
Mateus Ribeiro
Bom dia Joel!
Vc deve fazer uma varredura na tabela onde as autenticações são salvas. Posta aí o código que vc usa pra autenticar!
11/08/2015
Joel Alves
( Bom dia Mateus, abaixo segue meu código do Form Login, já fiz refiz e nada sempre dar a mesma coisa, o engraçado é que enquanto não mexo no código principal da aplicação, tudo funciona legal, mais no momento que eu mando criar os formes e chamar o Formulário Principal da aplicação, ai causa o erro que citei, se você poder dar uma ajudinha ai macho, se você quiser te mando o CÓDIGO DO MEU VIEW SOURCE ,
Desde já agradeço
unit U_Login;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons, sBitBtn,
sEdit, Vcl.Imaging.pngimage, Vcl.ExtCtrls, sLabel, sPanel,db;
type
TFrmLogin = class(TForm)
Edt_usuario: TsEdit;
Edt_senha: TsEdit;
Bit_acessar: TsBitBtn;
Bit_cancelar: TsBitBtn;
sPanel1: TsPanel;
Lbl_usuario: TsLabel;
Lbl_senha: TsLabel;
GroupBox1: TGroupBox;
Image1: TImage;
procedure Bit_cancelarClick(Sender: TObject);
procedure Edt_usuarioExit(Sender: TObject);
procedure Bit_acessarClick(Sender: TObject);
procedure FormShow(Sender: TObject);
private
tentativas :integer;
{ Private declarations }
public
{ Public declarations }
end;
var
FrmLogin: TFrmLogin;
implementation
{$R *.dfm}
uses U_DM;
procedure TFrmLogin.Bit_acessarClick(Sender: TObject);
begin
if Edt_Senha.text = DMprincipal.FDTbl_loginUSU_SENHA.Value then
ShowMessage ('Olá ' + DMprincipal.FDTbl_loginUSU_NOME.Value + ', Seja Bem Vindo ao Sistema Svendas!')
else
begin
inc(tentativas); // tentativas := tentativas+1
if tentativas =1 then
ShowMessage ('Você errou sua senha só restam mais uma tentativa de Acesso ao Sistema!')
else
begin
ShowMessage ('Você não tem permissão para acessar nosso sistema, Favor entrar em contato com Administrador!');
Self.Close;
end;
end;
end;
procedure TFrmLogin.Bit_cancelarClick(Sender: TObject);
begin
Application.Terminate;
end;
procedure TFrmLogin.Edt_usuarioExit(Sender: TObject);
begin
if not (DMprincipal.FDTbl_login.Locate('USU_LOGIN',Edt_Usuario.Text,[lopartialkey,locaseinsensitive]))then
// vai localizar no datamodulo(DM) a tabela login e vai verificar se o usuário cadastrado no campo USU_LOGIN e o mesmo.
begin
// caso o usuário serja diferente ele vai exibir a seguinte mensagem abaixo
ShowMessage ('Usuário não Cadastrado no Sistema');
Edt_Usuario.SetFocus;
// o foco do cursor fica piscando no Edt_Usuario
end;
end;
procedure TFrmLogin.FormShow(Sender: TObject);
begin
DMprincipal.FDTbl_login.open; // abre a tabela de login
Tentativas := 0;
// colocar o contador de tentativas dentro do envento onshow do formulário, ou seja, assim que o formulário carregar.
end;
end.!
11/08/2015
Joel Alves
Mateus segue o meu CÓDIGO View Source, program SVendas; uses Vcl.Forms, SysUtils, U_Principal in 'U_Principal.pas' , U_Login in 'U_Login.pas' , U_DMprincipal in 'U_DMprincipal.pas' {DMprincipal: TDataModule}, U_Splash in 'U_Splash.pas' ; {$R *.res} var inc: integer; begin Application.Initialize; Application.MainFormOnTaskbar := True; // Aqui esta criando o FrmSplash Scree FrmSplash := TFrmSplash.Create(Application); FrmSplash.Show; FrmSplash.Update; // Aqui esta Incrementando o ProgressBar FrmSplash.ProgressBar1.Visible := True; for inc := 100 to 5000 do begin FrmSplash.ProgressBar1.Position := inc; end; FrmSplash.ProgressBar1.Visible := False; Application.Title := 'SVendas'; // Aqui Criar o Formulario Login Application.CreateForm(TFrmLogin, FrmLogin); FrmSplash.Hide; FrmSplash.Free; Application.CreateForm(TFrmPrincipal, FrmPrincipal); Application.CreateForm(TDMprincipal, DMprincipal); // Aqui executa a Applicação Application.Run; end.
Clique aqui para fazer login e interagir na Comunidade :)
Inserção de url