Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2233 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  [ Delphi ] Copier une instance de classe

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ Delphi ] Copier une instance de classe

n°514339
Ciler
Posté le 14-09-2003 à 15:34:53  profilanswer
 

: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
mood
Publicité
Posté le 14-09-2003 à 15:34:53  profilanswer
 

n°514436
Ciler
Posté le 14-09-2003 à 18:24:33  profilanswer
 

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
n°514465
antp
Super Administrateur
Champion des excuses bidons
Posté le 14-09-2003 à 19:04:28  profilanswer
 

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
n°514474
Ciler
Posté le 14-09-2003 à 19:10:43  profilanswer
 

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
n°514530
antp
Super Administrateur
Champion des excuses bidons
Posté le 14-09-2003 à 19:57:51  profilanswer
 

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
n°514881
Ciler
Posté le 15-09-2003 à 13:30:36  profilanswer
 

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
n°514888
antp
Super Administrateur
Champion des excuses bidons
Posté le 15-09-2003 à 13:44:48  profilanswer
 

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
n°515143
Ciler
Posté le 15-09-2003 à 18:29:06  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  [ Delphi ] Copier une instance de classe

 

Sujets relatifs
copier une table dans une autre[Delphi] Problème de transparence d'images
classe socket std ?lancer une application externe avec delphi 6 ...
pb de classe qui contient un pointeur vers une autre et inversement...[DELPHI] Avec le chart, comment afficher plusieur courbes ?
BCB6: installer des composants DelphiDelphi et SAP ?
[DELPHI] récupérer le nom du répertoire ... [RESOLU]Convertir une lettre en binaire en Delphi ?
Plus de sujets relatifs à : [ Delphi ] Copier une instance de classe


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR