Copier les proprietes d'un objet vers un autre objet

Résolu
dimdidi Messages postés 26 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 18 juillet 2006 - 23 janv. 2006 à 09:43
dimdidi Messages postés 26 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 18 juillet 2006 - 1 févr. 2006 à 14:09
Bonjour,

Je cherche comment copier les valeurs des proprietes d'un objet vers un autre objet

TInfo =class(TObject)
public
sValeur:string;
sValeur1:string;
sValeur2:string;
....
end;

procedure TForm1.Button1Click(Sender: TObject);
var
Info1,Info2:TInfo;
begin
Info1:=TInfo.create();
Info1.sValeur:='Toto';
ComboBox1.Items.Objects[0]:=Info1;


Info2:=TInfo.create();
StringGrid1.Objects[0,0]:=Info2;

// Je voudrais copier toutes les valeurs des proprietes de
// ComboBox1.Items.Objects[0] vers StringGrid1.Objects[0,0]
// Mais le nombre de propriete de la class TInfo peut changer

StringGrid1.Objects[0,0].sValeur:=ComboBox1.Items.Objects[0].sValeur;
...

//J'aimerais faire une sorte de
//StringGrid1.Objects[0,0]:=ComboBox1.Items.Objects[0];
// Mais on copie "le pointeur"

end;

J'espère que ma question est suffisamment clair.

Si quelqu'un a une idée.

Merci d'avance.


Dimdidi

8 réponses

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
23 janv. 2006 à 21:16
En règle générale, la méthode Assign (déclarée à partir de TPersistent) est surchargée et sert à cela.

<hr color="#008000">Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
3
dimdidi Messages postés 26 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 18 juillet 2006
24 janv. 2006 à 09:29
Merci pour la réponse
Mais pour mon cas c'est un TObject donc au dessus de TPersistent donc je ne vois pas comment faire (je suis un peu débutant)

J'ai rechercher Assign (à partir de TPersistent)
J'ai regardé les codes et j'ai pensé faire tout simplement

TInfo =class(TObject)
private
public
sValeur:string;
constructor create;
procedure Assign(Source:TInfo);
end;

procedure TInfo.Assign(Source: TInfo);
begin
if Source<>nil then
self.sValeur:=Source.sValeur;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
Info1,Info2:TInfo;
begin
Info1:=TInfo.create();
Info1.sValeur:='Toto';
ComboBox1.Items.Objects[0]:=Info1;
Info2:=TInfo.create();
StringGrid1.Objects[0,0]:=Info2;

TInfo(StringGrid1.Objects[0,0]).assign(ComboBox1.Items.Objects[0]);
end;


Dimdidi
3
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
24 janv. 2006 à 19:52
Tu as eu le bon réflexe !
Le code est correct. Félicitations.
NB : si tu envisages de sous-classer TInfo, il serait bon de déclarer la méthode Assign en méthode virtuelle.
<hr color="#008000">Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
dimdidi Messages postés 26 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 18 juillet 2006
25 janv. 2006 à 11:54
Merci

Quand tu parles de sous classer
c'est bien

TInfo =class(TObject)
private
public
sValeur:string;
procedure Assign(Source:TInfo);
end;
TInfo2 =class(TInfo)
private
public
sValeur2:string;
end;


Dimdidi
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
25 janv. 2006 à 20:48
Oui, c'est exactement ça. On parle aussi de classes dérivées.
Vois-tu l'intérêt ou pas de déclarer "Virtual" la méthode Assign ?
<hr color="#008000">Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
dimdidi Messages postés 26 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 18 juillet 2006
27 janv. 2006 à 07:57
Vois-tu l'intérêt ou pas de déclarer "Virtual" la méthode Assign ?

Désolé je ne vois pas car je suis un peu débutant.
Mais je veux bien que tu m'expliques.
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
31 janv. 2006 à 23:41
Plutôt que de me lancer dans de grandes explications pas forcément claires, je te recommande de consulter l'aide en ligne sur "Méthodes virtuelles et dynamiques". Je pense que ce sera beaucoup mieux ...


<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
dimdidi Messages postés 26 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 18 juillet 2006
1 févr. 2006 à 14:09
Merci pour les infos


Dimdidi
0
Rejoignez-nous