Delphi 4 et TListView : gestion mémoire

Fermé
php - 14 nov. 2001 à 20:39
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 - 15 nov. 2001 à 09:05
Bonjour,

En Delphi 4 j'utilise un objet TListView pour stocker des éléments dans une liste
A chaque élément TListItem de ma liste j'associe une structure complémentaire que je créé dynamiquement lors de la création de chaque TListItem grâce à la propriété Data

Voici un résumé du mon code pour être un peu + clair :

...
type
PInfo = ^TInfo;
TInfo = record
client_id : string;
util_id : string;
end;

...


procedure TForm1.Button1Click(Sender: TObject);
var
ListItem: TListItem;
InfoPtr: PInfo;

begin


ListView1.Items.Clear;
New(InfoPtr);
InfoPtr^.client_id := '0001';
InfoPtr^.util_id := '0002';

ListItem := ListView1.Items.Add;
ListItem.Caption := 'Test';
ListItem.ImageIndex := 0;
ListItem.Data=InfoPtr;
...
end;

Question : suis-je obliger de supprimer manuellement chaque structure pointée par la propriété Data de chaque item avec free ou bien le ListView le fait-il automatiquement à ma place ?
Si oui comment ?

Est-ce pareil avec les TTreeView ?

Merci

Philippe


Question
A voir également:

1 réponse

sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
15 nov. 2001 à 09:05
>suis-je obliger de supprimer manuellement chaque structure
>pointée par la propriété Data de chaque item avec free ou bien le
>ListView le fait-il automatiquement à ma place ?

Oui, c'est nécessaire.
Car .DATA ne prend pas un objet, mais seulement un pointeur.
Il ne gère donc pas la destruction.

L'autre solution serai d'utiliser la propriété .index, et de stocker tes objets eux-mêmes dans une collection ou un tableau à côté, ainsi tu n'aurais pas à les supprimer en fin de vie du programme.
(L'idéal serai de créer un nouvel objet qui hérite de TListView et qui construit et détruit ce tableau...).

Sinon, il existe peut-être un objet dérivé de ListView tout prêt qui gère la destruction des objets.
Va voir sur www.torry.net dans la section composants graphique. Il y a peut-être ce que tu cherches.
0