[ Delphi ] Copier une instance de classe

Copier une instance de classe [ Delphi ] - Delphi/Pascal - Programmation

Marsh Posté le 14-09-2003 à 15:34:53    

:hello:  
 
j'ai encore un probleme  :D  
 
Je code sur la playlist de TCMP la et je me trouve dans une impasse.
 
La playlist est composee d'entrees, avec des champs fixes pour les tags connus (titre, artiste...) et d'une StringList pour les tags personnalises (extended) :


REntry = record;
  Title: WideString;
  Artist: WideString;
  ...
  Extended: TCustomWideStringList;
end;


 
Pour l'edition de chaque entree, ca se fait dans une fenetre adequate qui est mise au courant du contenu en cours lors de son create. Comme je veux pouvoir annuler d'eventuelles modifications, je garde de cote l'entree d'origine et je travaille sur une copie :
 


TEditForm = class(TForm)
 ...
private
  lEntry: REntry;
  sEntry: PEntry; // PEntry: ^REntry;
public  
  constructor Create(plEntry: REntry);
end;
 
 et
 
constructor TEDitForm.Create(plEntry: REntry);
begin
  inherited Create;
  lEntry := plEntry;
  sEntry := @plEntry;
  ...
end;


 
En cas d'annulation, on touche a rien, en cas de mise a jour, on fait sEntry^ := lEntry; (lEntry est l'enregistrement de travail).
 
Seulement voila, lEntry.Extended et sEntry^.Extended c'est le meme pointeur :/ ALors comment je peux faire pour que lEntry.Extended soit une copie de plEntry.Exended comme les autres champs et non pas pointe sur les memes donnes ?


---------------
And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him. Revelations 6:8
Reply

Marsh Posté le 14-09-2003 à 15:34:53   

Reply

Marsh Posté le 14-09-2003 à 18:24:33    

Up...
 
La question est pas claire ou la reponse pas evidente ?


---------------
And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him. Revelations 6:8
Reply

Marsh Posté le 14-09-2003 à 19:04:28    

tu copies chaque champ du record individuellement
si dans ton record tu n'as que des types simples (nombres) tu peux le copier en un bloc. Mais là y a rien de prévu :o
d'où l'intérêt d'utiliser une classe plutôt qu'un record, et de définir la méthode Assign, comme le font pas mal de classes de la VCL, qui recopie le contenu de la classe passée en paramètre
 
Note que le record que tu reçois en paramètre est déjà une copie du record d'origine, vu que tu ne spécifie ni var ni const devant le nom du paramètre (d'où l'intérêt de mettre const si tu le modifie pas, pour pas qu'il le copie bêtement pour rien)


Message édité par antp le 14-09-2003 à 19:05:45

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 14-09-2003 à 19:10:43    

antp a écrit :

tu copies chaque champ du record individuellement
si dans ton record tu n'as que des types simples (nombres) tu peux le copier en un bloc. Mais là y a rien de prévu :o
d'où l'intérêt d'utiliser une classe plutôt qu'un record, et de définir la méthode Assign, comme le font pas mal de classes de la VCL, qui recopie le contenu de la classe passée en paramètre
 
Note que le record que tu reçois en paramètre est déjà une copie du record d'origine, vu que tu ne spécifie ni var ni const devant le nom du paramètre (d'où l'intérêt de mettre const si tu le modifie pas, pour pas qu'il le copie bêtement pour rien)


 
My bad, il est bien en var  :o  
 
V voir ce que je peux faire avec assign  :jap:


---------------
And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him. Revelations 6:8
Reply

Marsh Posté le 14-09-2003 à 19:57:51    

assign c'est juste le nom utilisé pour désigner une méthode de recopie
- c'est à toi de l'écrire pour ta classe
- c'est pour les objets, pas pour les record


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 15-09-2003 à 13:30:36    

antp a écrit :

assign c'est juste le nom utilisé pour désigner une méthode de recopie
- c'est à toi de l'écrire pour ta classe
- c'est pour les objets, pas pour les record


 
j'avais compris  :o En plus des methodes sur des records, spa trop possib non  :o  
 
Bon j'ai du bol, le TWideStringList a un assgin implemente. Par contre, dans la meme veine mais a un autre niveau, si vous avez une TObjectList de TTruc (c'est une classe hein)
 
faire UneListe.Assign(UneAUtreListe); ca genere bien une nouvelle liste de pointeurs, mais les objets pointes sont les memes  :o


---------------
And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him. Revelations 6:8
Reply

Marsh Posté le 15-09-2003 à 13:44:48    

bah oui comment veux-tu qu'elle sache comment dédoubler les objets :heink:


Message édité par antp le 15-09-2003 à 13:46:30

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 15-09-2003 à 18:29:06    

antp a écrit :

bah oui comment veux-tu qu'elle sache comment dédoubler les objets :heink:


 
Ben je sais pas... Disons qu'avant de constater le probleme, son eventualite ne m'avait pas frappee


---------------
And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him. Revelations 6:8
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed