11/03/2006

Fechar Tela de Login

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


Roger1976

Respostas

11/03/2006

Aerreira

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.


Responder Citar

13/03/2006

Paulocesar1301

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.


Responder Citar

16/03/2006

Roger1976

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


Responder Citar

16/03/2006

Roger1976

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


Responder Citar

07/08/2015

Joel Alves

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
Responder Citar

07/08/2015

Mateus Ribeiro

[quote]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
[/quote]

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

11/08/2015

Joel Alves

[quote][quote] ( 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.!
Responder Citar

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.


Responder Citar