Как правильно закрыть программу?
1. Не нужно уничтожать/освобождать компоненты, которые созданы через дизайнер или с указанием Owner. Такие компоненты сами освободятся. 
2. FormDestroy - вызывается при уничтожении формы, а ты снова пытаешься вызвать уничтожение формы. Это даже логически можно понять.
3. Application.Terminate; - нормальное закрытие программы. Этот метод ставит флаг на завершение программы. И программа закроется сразу, как только очередь сообщений закончится.
1. Не нужно уничтожать/освобождать компоненты, которые созданы через дизайнер или с указанием Owner. Такие компоненты сами освободятся. 
2. FormDestroy - вызывается при уничтожении формы, а ты снова пытаешься вызвать уничтожение формы. Это даже логически можно понять.
3. Application.Terminate; - нормальное закрытие программы. Этот метод ставит флаг на завершение программы. И программа закроется сразу, как только очередь сообщений закончится.