Bonjour,

Je suis en train de corriger certains bogues d'une vieille application MDI et notamment le fait que lorsque je quitte le programme en ayant une fenêtre ouverte j'ai une violation d'accès.

Je voulais résoudre le problème en utilisant ma procédure de fermeture de fenêtre tant que j'ai une fenêtre ouverte mais le programme tourne en boucle.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
procedure TFrmStart.FichierQuitterClick(Sender: TObject);
begin
  while (FrmStart.MDIChildCount > 0) do
  begin
    FrmStart.ActiveMDIChild.Close;
  end;
  Application.Terminate;
end;
J'ai mis un point d'arret pour regarder ce qui se passe mais le count ne se décrémente pas, ce qui parait normal vu que la fenêtre ne se ferme pas.

Le code suivant fonctionne sur toutes mes fenêtres
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
procedure TFrmStart.FichierFermerClick(Sender: TObject);
begin
  If ((FrmStart.MDIChildCount)>0) then
    FrmStart.ActiveMDIChild.Close;
 
end;
Je ne comprend pas pourquoi lorsque je remplace la condition par une itération cela ne fonctionne plus.

La réponse est peut-être toute bête mais je ne la connais pas.
Si vous pouvez éclairer ma lanterne...

Merci