Lorsque l'on développe une application, on est souvent amené à créer dynamiquement des fiches. Pour ne pas créer de fuite de mémoire, il faut bien sûr penser à libérer ces fiches après usage.
Commençons par différencier deux type d'appel à une fiche, l'appel Modale et le non-Modale.
Les fiches Modales:
Lorsque l'on appelle une fiche de façon Modale, l'application interrompt son exécution et attends la fermeture de cette dernière pour reprendre son exécution. On peut donc libérer cette fiche juste après l'avoir appelée.
L'appel et la libération se feront comme ceci:
var
MaFiche : TMyForm;
begin
MaFiche:=TMyForm.Create(nil);
try
MaFiche.Showmodal;
finally
MaFiche.Free;
end;
end;
Les fiches non-Modale:
A contrario, lorsque l'on appelle une fiche de façon non-Modale, l’exécution de l'application n'est pas interrompu, cette dernière fonctionne parallèlement à l'application. La libération de la fiche ne peut donc pas avoir lieu juste après son appel.
L'appel se fera comme ceci:
var
MaFiche : TMyForm;
begin
MaFiche:=TMyForm.Create(nil);
MaFiche.Show;
end;
Et la libération se fera dans la procédure liée à l'événement OnClose de la fiche appelée, à l'aide du paramètre Action qui détermine comment doit se fermer la fiche:
procedure TMyForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree; {La fiche est fermée et la mémoire qu'elle occupe est libérée}
end;