premierement, pourquoi ne pas laisser les fiches etre créées puis les appelées avec Show.
elle ne seront pas visible de toute façons.
deuxiement, on ne ferme pas une fenetre en appelant DestroyWindowHandle mais Free comme pour tout les objets, a condition bien sur qu'on gere la creation et destruction.
le mieux etant d'appeler Form.Close qui genere toute une suite d'evenement qui sont utile pour la procedure de destruction de la fiche.
troisiement, on ne quitte jamais une application en appelant Application.Terminate ou encore Halt(0) directement mais bien en appelant la methode "Close" de la fiche principale, encore une fois, dans un soucis de declancher la suite d'evenement necessaire a la destruction de l'application (OnClose, OnDestroy).
Application.Terminate reviens a tuer le processus via le gestionnaire des taches, ce n'est pas une methode propre et adaptée pour quitter d'une façon normale une application. Les evenements OnClose et OnDestroy etant necessaire pour detruire les instances d'objets ou de pointeurs créés dynamiquement et non géré par l'une des fiches.
en somme en appelant Form1.Close on declanche ceci :
Form1.Close ->
Form1.OnCloseQuery ->
si CloseQuery : Form1.DoClose ->
Form1.OnClose ->
liberations/evenement de fermeture gérées par le developeur ->
si Form1 = fiche modal : Modalresult = mrCancel -<
si Form1 = fiche MDIChild : action = Minimize -<
si Form1 = fiche principale : Application.Terminate ->
si CallTerminateProcs : PostQuitMessage(0);
Liberation gérées par le systeme ->
Form1.Destroy ->
Form1.OnDestroy ->
liberations gérées par le developeur
si on appel directement Application.Terminate on saute donc toutes ces etapes importantes de verification et de liberation, du moins de preparation a une fermeture du programme.
ce qui peu empecher la liberation de ressources, la remise a zero de parametres, la sauvegarde de travail ect...
vus qu'on gere ces problemes dans le gestionnaire OnCloseQuery/OnClose et non dans OnDestroy qui ne sert qu'a liberer des objets dynamique ou des ressources bien qu'ils puissent figurer aussi dans OnClose.
en gros :
tu laisse ton projet tel quel (creation de fiche a la creation de la principale)
pour fermer une fiche tu appel FormX.Close, pour l'ouvrir FormX.Show (ou ShowModal)
pour quitter le programme tu appel FormP.Close (fiche principale)
pour ce qui est des violations d'accés, c'est en general un probleme d'allocation de ressources par exemple a la creation d'un objet ou d'un transtypage ou encore de la lecture/ecriture sur un pointeur/instance non alloué ou erroné.
Croc (click me)