1. Se estiver com 2 ou + Form abertos Close resolve? Creio que nao.
Sim, resolve, desde que no evento onClose do MainForm você faça a verificação se os demais forms estão abertos, se estão abertos feche-os.
if Form1 <> nil then
Form1.Close;
if Form2 <> nil then
Form2.Close;
// Lembrar de colocar um "Form1:= Nil" após sair de um form
2. Application.Terminate mata a execução no ato? Quando uso o Halt é com esta intencao
Halt fecha a aplicação de forma anormal, não liberando a memória alocada pelos objetos, recursos consumidos, etc. O seu único parâmetro é o ExitCode retornado ao sistema operacional, e não tem relação com a quantidade de forms abertos.
Terminate fecha a aplicação, assegurando que tudo que foi alocado seja liberado. Em outras palavras, chama o método Free para todos os componentes, que chamarão Free para os componentes que são seus ´filhos´ (definidos através do parâmetro Owner no construtor). Também dispara uma mensagem para o Windows/Linux, para garantir que tudo seja destruído na ordem certa. Por essa razão Terminate pode demorar alguns segundos para fechar a aplicação, enquanto Halt é imediato.
Existe a propriedade Terminated, da classe TApplication, que pode ser usada para saber se a aplicação está em processo de shut down. Isso pode ser útil para não executar nenhum código quando a aplicação estiver sendo finalizada.
O método Close da classe TCustomForm chama Application.Terminate caso o formulário seja o MainForm da aplicação. Portanto, ambos têm o mesmo efeito nesse caso.
Portanto, na maioria dos casos, use Terminate ou Close, se o form for o principal.
Grato pelas dicas. Me responda as perguntas acima e paro de usar o halt.
Ora, você para se quiser e não se eu responder, kkkkkkk
Sim, antes do
Application.Run porque nada foi gerado ainda, aí nesse caso o Halt vai funcionar porque não precisa destruir nada. A não ser que criou, muito difícil...