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?