Array
(
)

Terminar aplicação no código do .dpr

Bruno Belchior
   - 14 fev 2006

Pessoal estou usando o método Terminate do objeto Application antes de criar o formulário principal e alguns outros DataModules, porém o sistema está travando, pensei em utilizar o Halt(0) mas não me livrou do problema... algum conselho?


Massuda
   - 14 fev 2006

No DPR, basta não executar o Application.Run ou simplesmente sair com Exit.

Use Application.Terminate de ´dentro´ do programa, depois que Application.Run é chamado, mas ainda não retornou.


Bruno Belchior
   - 15 fev 2006

Eu usei o Application.Terminate mas antes do Run... Quer dizer que não funciona?


Massuda
   - 15 fev 2006


Citação:
Quer dizer que não funciona?
Fiz alguns testes e pelo que vi, deveria funcionar (embora eu prefira simplesmente não executar o Application.Run).

Qual é o código no seu DPR?


Michael
   - 15 fev 2006


Citação:
Eu usei o Application.Terminate mas antes do Run... Quer dizer que não funciona?


O método Run do objeto Application inicia o loop de mensagens da aplicação. Se vc não quer que o aplicativo inicie, é melhor, como o Massuda sugeriu, simplesmente não chamar a rotina, pois vc estará economizando processamento. Sem chamar Run, a aplicação não inicia propriamente dita.

Já fiz isso uma vez e meu código foi mais ou menos assim:

#Código

if AlgumaCoisaQueBloqueieOInicioDaAplicacao then
...
else
begin
Application.Initialize;
...
Application.Run;
end;


[]´s


Bruno Belchior
   - 15 fev 2006

A questão é que tenho um componente de auditoria na minha aplicação (semelhante ao TUserControl), então quando crio o DataModule onde o componente (não visual) está contido, o formulário de auditoria aparece, digitando corretamente a senha e usuário tudo volta ao normal, mas se o usuário cancelar o login a aplicação deve fechar, então chamo Application.Terminate, mas como não chamei Application.Run então esta travando a aplicação...#Código


Application.Initialize;
// Na Linha abaixo é chamado o FrmLogin...
Application.CreateForm(TDtMdlAuditoriaEscolar, DtMdlAuditoriaEscolar);
Application.CreateForm(TFrmPrincipal, FrmPrincipal);
Application.Run;



Massuda
   - 15 fev 2006

Pelo que testei, o problema é que seu programa está criando o form principal e provavelmente o form não deve funcionar corretamente no caso do usuário não estar autorizado a utilizar o programa.

Uma alternativa seria ter algo no DtMdlAuditoriaEscolar que indique se o login do usuário foi ou não aceito e assim criar ou não o form principal do programa e dar o Application.Run (isso tem a vantagem de evitar que o form principal pisque na tela).


Bruno Belchior
   - 15 fev 2006

Mesmo tendo dado um Application.Terminate do DtmdlAuditoria quando vou conferir com a propriedade Terminated ela me retorna False...#Código

if Application.Terminated = False the
Application.Run; // Sempre entra aqui...



Massuda
   - 15 fev 2006


Citação:
...quando vou conferir com a propriedade Terminated ela me retorna False...
Application.Terminated tem seu valor alterado pelo loop de mensagens do programa, que é iniciado quando você executa Application.Run; logo, no momento que você está testando, Application.Terminated está com o valor default, que é False.