Copier les proprietes d'un objet vers un autre objet

Résolu
Signaler
Messages postés
26
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
18 juillet 2006
-
Messages postés
26
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
18 juillet 2006
-
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

Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
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.
Messages postés
26
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
18 juillet 2006

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
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
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.
Messages postés
26
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
18 juillet 2006

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
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
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.
Messages postés
26
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
18 juillet 2006

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.
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
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.
Messages postés
26
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
18 juillet 2006

Merci pour les infos


Dimdidi