Tenho uma tela de senha que é chamada logo de primeira. Nesta tela 
tenho dois campos:
usuário e login. Quando clico em confirmar, é verificado no banco se 
os mesmos estão de
acordo. Estando, é passado a seguinte instrução:

Application.CreateForm(TFrmPrincipal,FrmPrincipal);
FrmSenha.Hide;
FrmPrincipal.ShowModal;
Application.Terminate;

Na tela principal, tenho um menu e dentro de um deles tenho o seguinte
Efetuar logoff
Sair

Quando clico em efetuar logoff, passo a seguinte instrução:
FrmPrincipal.free;
FrmSenha.Show;

Isso faz com que a tela da senha que foi escondida apareça novamente 
para que se possa
digitar outro usuário e senha. Até aí tudo bem.

Quando volto a tela principal do sistema e clico em Sair, no evento 
onClose tem as
seguintes linhas:

if (messageDlg('Deseja realmente encerrar?',mtConfirmation,
[mbYes,mbNo],0)=mrYes) then
close
else
Action:=caNone;

Então, no meu entender o que acontece: se o usuário confirmar a 
saída, o frmprincipal
será fechado, passando para a próxima linha contida no frmsenha, a 
saber
Application.terminate;

Só que, ao fazer isso, é gerado um erro de AccessViolation, a saber: 
Project sgp.exe
raised exception class EAccessViolation with message 'Access 
violation at address
00000000. Read of address 000000000'. Process stopped. Use step or 
run to continue.

Fazendo algumas mudanças, por exemplo: troco o close por 
Action:=caFree gera o seguinte
erro: Project C:\Projeto_2007\sgp.exe raised too many consecutive 
exceptions: 'access violation
at 0x0000000: read of address 0x0000000'. Process stopped. Use step 
or run to continue


Isso só acontece quando clico antes no efetuar logoff e faço um novo 
login. Se eu sair
direto sem me logar novamente, nada acontece.

Gostaria de uma ajudinha para conseguir fazer esse lançe de logoff e 
permitir login de novo.

Alguém poderia me auxiliar?

Responder a