Fórum Ajuda com logout no delphi #530536

02/09/2015

0

Boa tarde

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

Emanuel Gonçalves

Responder

Posts

02/09/2015

Emanuel Gonçalves

mais um detalhe

estou criando o datamodule e o frm_principal no auto create forms
Responder

Gostei + 0

02/09/2015

Mateus Ribeiro

Boa tarde!

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
Responder

Gostei + 0

03/09/2015

Emanuel Gonçalves

Bom dia

Mateus tentei e não consegui colocar pra rodar :(
Responder

Gostei + 0

03/09/2015

Mateus Ribeiro

Bom dia!

Qual o problema? Deu erro?
Responder

Gostei + 0

03/09/2015

Emanuel Gonçalves

[img]http://arquivo.devmedia.com.br/forum/imagem/447550-20150903-082156.jpg[/img]

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

Gostei + 0

03/09/2015

Emanuel Gonçalves

[img]http://arquivo.devmedia.com.br/forum/imagem/447550-20150903-082545.jpg[/img]
Responder

Gostei + 0

03/09/2015

Mateus Ribeiro

Ah sim, o motivo do erro é que vc está tentando destruir o Form_Principal, o que é impossível, pelo fato dele ser o pai de todos rs

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

Gostei + 0

03/09/2015

Emanuel Gonçalves

resolve sim, o detalhe agora é que ao rodar a aplicação eu tenho que fazer o login duas vezes pra depois o form principal aparecer kkk
Responder

Gostei + 0

03/09/2015

Mateus Ribeiro

Vish cara, nesse caso é alguma coisa no seu código que chama 2x o frmLogin mesmo se acertar de primeira a autenticação.

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

Gostei + 0

03/09/2015

Emanuel Gonçalves

obrigado Mateus,

foi de grande ajuda
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar