Array
(
)

Fechar Tela de Login

Roger1976
   - 11 mar 2006

Olá amigos!!!!!

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...


Aerreira
   - 11 mar 2006

Bom, tenho algo parecido. Eu coloco uma outra variável no DataModule, e dentro da tela de login, após um login válido, atribui o nome do usuário para essa variável dentro do Datamodule.

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.


Paulocesar1301
   - 13 mar 2006

Eu não costumo usar DataModule e sim uma Unit Base onde coloco minhas procs e funs gerais, assim como variáveis que serão utilizadas em mais de uma tela, seguindo esta linha de raciocínio, basta criares seu form de login exatamente como uma splash (SeuForm:=TSeuForm.Create(nil)), no seu botão ´LOGAR´ ou coisa parecida, fazer os testes necessários de usuário e senha e aí sim carregar na memória o seu form principal. Até aí tudo bem...
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.


Roger1976
   - 16 mar 2006

Primeiramente, agradeço pela atenção de vcs....

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!!!!


Roger1976
   - 16 mar 2006

ah, uma informação errada, o Application.Terminate foi digtado no evento OnClose do form e não no Destroy, mesmo pq no Destroy o executável ainda continua na memória, o que não ocorre no onclose...


Joel Alves
   - 07 ago 2015


Citação:
OLÁ BOM DIA SOU NOVATO POR AQUI , MAIS ESTOU COM UM PROBLEMA QUE TA MIM TIRANDO A PAZ , NO QUAL TENHO UM " FORM DE LOGIN COM AUTENTICAÇÃO NO BANCO, APARENTEMENTE FUNCIONAL, SÓ QUE O PROBLEMA É QUANDO VOU LOGAR MESMO DIGITANDO A SENHA DO USUÁRIO ERRADA ELE ABRE O FORMULÁRIO PRINCIPAL DA APLICAÇÃO, E NÃO ESTOU CONSEGUINDO RESOLVER ESTE ERRO POR FAVOR ALGUÉM MIM AJUDE AI !!! DESDE JÁ AGRADEÇO

Mateus Ribeiro
   - 07 ago 2015


Citação:

Citação:
OLÁ BOM DIA SOU NOVATO POR AQUI , MAIS ESTOU COM UM PROBLEMA QUE TA MIM TIRANDO A PAZ , NO QUAL TENHO UM " FORM DE LOGIN COM AUTENTICAÇÃO NO BANCO, APARENTEMENTE FUNCIONAL, SÓ QUE O PROBLEMA É QUANDO VOU LOGAR MESMO DIGITANDO A SENHA DO USUÁRIO ERRADA ELE ABRE O FORMULÁRIO PRINCIPAL DA APLICAÇÃO, E NÃO ESTOU CONSEGUINDO RESOLVER ESTE ERRO POR FAVOR ALGUÉM MIM AJUDE AI !!! DESDE JÁ AGRADEÇO


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!

Joel Alves
   - 11 ago 2015


Citação:

Citação:

Citação:


( 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.!

Joel Alves
   - 11 ago 2015

#Código

Mateus segue o meu CÓDIGO  View Source, 

program SVendas;

uses
  Vcl.Forms,
  SysUtils,
  U_Principal in 'U_Principal.pas' {FrmPrincipal},
  U_Login in 'U_Login.pas' {FrmLogin},
  U_DMprincipal in 'U_DMprincipal.pas' {DMprincipal: TDataModule},
  U_Splash in 'U_Splash.pas' {FrmSplash};

{$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.