Fórum Ajuda com logout no delphi #530536
02/09/2015
0
minha aplicação já está rodando com uma tela de login corretamente sem erros, gostaria agora de implementar o logout no form principal para retornar a tela de login
vamos aos detalhes da aplicação
código fonte do projeto ==============================================================================================
program Project_Consulta;
uses
Vcl.Forms,
System.UITypes,
Unit_Principal in 'Unit_Principal.pas' ,
UnitDataModule in 'UnitDataModule.pas' {DataModule1: TDataModule},
UnitClientes in 'UnitClientes.pas' ,
UnitLogin in 'UnitLogin.pas' ,
UnitFornecedores in 'UnitFornecedores.pas' ,
UnitPedidos in 'UnitPedidos.pas' ;
{$R *.res}
VAR usuarios : TFrmLogin;
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TDataModule1, DataModule1);
Application.CreateForm(TForm_Principal, Form_Principal);
usuarios:= TFrmLogin.Create(nil);
if usuarios.ShowModal = mrOk then
begin
usuarios.free;
Application.Run;
end
else
begin
usuarios.Free;
end;
end.
código fonte do frmLogin =========================================================================
unit UnitLogin;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, FireDAC.Stan.Intf,
FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS,
FireDAC.Phys.Intf, FireDAC.DApt.Intf, FireDAC.Stan.Async, FireDAC.DApt,
Data.DB, FireDAC.Comp.Client, FireDAC.Comp.DataSet, System.UITypes ;
type
TFrmLogin = class(TForm)
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Button2: TButton;
FDUpdateSQL1: TFDUpdateSQL;
DataSource1: TDataSource;
FDQuery1: TFDQuery;
FDQuery1CODIGO: TIntegerField;
FDQuery1COD_GRUPO: TIntegerField;
FDQuery1LOGIN: TStringField;
FDQuery1SENHA: TStringField;
FDQuery1CONF_SENHA: TStringField;
procedure Edit1Exit(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
tentativas : integer;
{ Private declarations }
public
{ Public declarations }
end;
var
FrmLogin: TFrmLogin;
implementation
{$R *.dfm}
uses UnitDataModule, Unit_Principal;
procedure TFrmLogin.Button1Click(Sender: TObject);
begin
if Edit2.TEXT = FDQuery1SENHA.Value then
else
begin
inc (tentativas);
if tentativas = 1 then
ShowMessage('Senha invalida, você tem mais uma tentativa!')
else
begin
ShowMessage('Você não tem permissão!');
Application.Terminate;
end;
modalresult:=mrnone;
end;
end;
procedure TFrmLogin.Button2Click(Sender: TObject);
begin
Application.Terminate;
end;
procedure TFrmLogin.Edit1Exit(Sender: TObject);
begin
if not (FDQuery1.Locate('login', Edit1.Text,[loPartialKey,loCaseInsensitive])) then
begin
ShowMessage('Usuário não cadastrado');
Edit1.SetFocus;
end;
end;
procedure TFrmLogin.FormCreate(Sender: TObject);
begin
DataModule1.FDConnection1.Connected := TRUE;
FDQuery1.Open;
tentativas := 0;
end;
end.
código fonto do form principal =============================================================================================
unit Unit_Principal;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Menus;
type
TForm_Principal = class(TForm)
MainMenu1: TMainMenu;
Clientes1: TMenuItem;
Fornecedores1: TMenuItem;
Pedidos1: TMenuItem;
Sair1: TMenuItem;
Logout1: TMenuItem;
procedure Clientes1Click(Sender: TObject);
procedure Sair1Click(Sender: TObject);
procedure Logout1Click(Sender: TObject);
procedure Fornecedores1Click(Sender: TObject);
procedure Pedidos1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form_Principal: TForm_Principal;
implementation
{$R *.dfm}
uses UnitClientes, UnitLogin, UnitDataModule, UnitFornecedores, UnitPedidos;
procedure TForm_Principal.Clientes1Click(Sender: TObject);
begin
FrmClientes:= TFrmClientes.Create(nil);
FrmClientes.ShowModal;
FrmClientes.Free;
end;
procedure TForm_Principal.Fornecedores1Click(Sender: TObject);
begin
FrmFornecedores:= TFrmFornecedores.Create(nil);
FrmFornecedores.ShowModal;
FrmFornecedores.Free;
end;
procedure TForm_Principal.Logout1Click(Sender: TObject);
begin
end;
procedure TForm_Principal.Pedidos1Click(Sender: TObject);
begin
FrmPedidos:= TFrmPedidos.Create(nil);
FrmPedidos.ShowModal;
FrmPedidos.Free;
end;
procedure TForm_Principal.Sair1Click(Sender: TObject);
begin
Application.Terminate;
end;
end.
============================================================
após autenticar o usuário no form login o form principal aparece, nesse eu tenho um MainMenu com os campos (clientes, fornecedores, pedido,..., logout e sair)
eu quero que ao clicar no logout o form principal feche e o form login apareça
Emanuel Gonçalves
Curtir tópico
+ 0Posts
02/09/2015
Emanuel Gonçalves
estou criando o datamodule e o frm_principal no auto create forms
Gostei + 0
02/09/2015
Mateus Ribeiro
Crie uma procedure no form de Login para ser responsável por isso, algo mais ou menos assim:
// Procedure que vai efetuar o Logout procedure TForm1.EfetuaLogout; begin Form2.Close; Form2.Release; Form2:= Nil; Form1.Show; end;
Aí no botão de logout do seu formulário principal, vc chama a função:
Form1.EfetuaLogout;
// No formulário de Login, procedimento que fecha o Login(Oculta) e abre o form pricipal
procedure TForm1.BitBtn1Click(Sender: TObject); begin Form2:= TForm2.Create(Self); Form2.Show; Form1.Hide; end;
Boa sorte
Gostei + 0
03/09/2015
Emanuel Gonçalves
Mateus tentei e não consegui colocar pra rodar :(
Gostei + 0
03/09/2015
Mateus Ribeiro
Qual o problema? Deu erro?
Gostei + 0
03/09/2015
Emanuel Gonçalves
erro ao fazer o login
[img]http://arquivo.devmedia.com.br/forum/imagem/447550-20150903-082223.jpg[/img]
erro ao fazer o logout
obs:(o programa mostra o erro no logout mais permanece no forme principal)
Gostei + 0
03/09/2015
Emanuel Gonçalves
Gostei + 0
03/09/2015
Mateus Ribeiro
Se vc colocar o deixar o FrmLogin no Auto-Create Forms e deixar o Form_Principal no Avalaible Forms, isso daria certo.
Não é mais viável?
Gostei + 0
03/09/2015
Emanuel Gonçalves
Gostei + 0
03/09/2015
Mateus Ribeiro
Em fim, mas vc poderia deixar da maneira q estava antes, e colocar no botão de logout:
Form_Principal.Hide; // Esconde o form Pai pq não pode ser destruído e nem fechado frmLogin.ShowModal; // Abre em modal pq depois q fechado vai ser destruído frmLogin.Release; frmLogin:= Nil;
Se no botão de login, chame o Form_Principal:
Form_Principal.Show; frmLogin.Close;
Gostei + 0
03/09/2015
Emanuel Gonçalves
foi de grande ajuda
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)