Delphi 4 et TListView : gestion mémoire
php
-
sebsauvage Messages postés 32893 Date d'inscription Statut Modérateur Dernière intervention -
sebsauvage Messages postés 32893 Date d'inscription Statut Modérateur Dernière intervention -
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
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:
- Delphi 4 et TListView : gestion mémoire
- Delphi 7 - Télécharger - Langages
- Code gta 4 ps4 - Guide
- Control center 4 - Télécharger - Divers Utilitaires
- Bde delphi - Télécharger - Édition & Programmation
- A4 divisé en 4 - Forum Graphisme
1 réponse
>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.
>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.