Libération des objets associés aux Items d'un TListView [Résolu]

Signaler
Messages postés
15
Date d'inscription
lundi 16 juin 2003
Statut
Membre
Dernière intervention
12 novembre 2010
-
Messages postés
15
Date d'inscription
lundi 16 juin 2003
Statut
Membre
Dernière intervention
12 novembre 2010
-
Bonjour,

J'ai plusieurs Form avec des TListView dont certains items ont des Objets associés. Comme pour les objets ajoutés aux Items d'un TListBox ou TComboBox, TListView ne les libère pas quand il est détruit.

Donc dans le FormDestroy j'ajoute :

FreeListViewObjects(ListView1.Items);

et

procedure FreeListViewObjects(const AListItems: TListItems);
var idx: integer;
begin
  for idx := 0 to Pred(AListItems.Count) do
  begin
    TObject(AListItems.Item[idx].Data).Free;
    AListItems.Item[idx].Data := nil;
  end;
end;


Çà marche bien quand je ferme les Forms concernées ou leur parents, le seul problème est quand je ferme directement la form principale. L'évènement FormDestroy des forms secondaires est bien appelé, mais dans ce cas précis AListItems.Count vaut 0 et j'ai une fuite mémoire correspondant à ces objets associés.

Il semblerait que le listview existe toujours mais qu'il n'y ai plus aucun Items associé. Je reprécise que ça ne fait ça que lors de la fermeture de la form principale.

Thierry B.

1 réponse

Messages postés
15
Date d'inscription
lundi 16 juin 2003
Statut
Membre
Dernière intervention
12 novembre 2010
1
Bon j'ai trouvé,

Il ne faut pas laisser Delphi fermer toutes les forms lui même mais le faire soi-même dans CloseQuery, et là plus de fuite ! :

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var i: integer;
begin
  for I := 1 to -1 + Screen.FormCount do
    Screen.Forms[I].Close;
end;