PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV (précédentes versions) → [POO] affectation par valeur
[POO] affectation par valeur
Débuté par dany, 26 fév. 2004 18:00 - 4 réponses
Posté le 26 février 2004 - 18:00
bonjour,

je cherche à passer un objet en paramètre d'une fenetre, et j'aimerai le
passer par valeur.

Explication:
1°) je crée un fenetre d'assistant dans lequel je crée un objet A
2°) une fois à la derniere étape de l'assistant, j'ouvre une fenetre soeur à
laquelle je donne l'objet A créé en paramètre. (je le réaffecte à un nouvel
objet B créé dans cette fenetre soeur en utilisant l'opérateur "=" : objetA
= objetB)
3°) je ferme l'assistant

.... sauf que je détruis l'objet créé A (normal) avec la fenetre assistant
mais aussi l'objet B car celui ci est passé par référence (et donc est
l'objet A finalement) et non par valeur.
J'ai trouvé plusieurs parades, entre autres :
- ne pas fermer l'assistant et le rendre invisible
- créer un nouvel objet dans la deuxieme fenetre et réaffecter attribut par
attribut (avec + de 50 attributs, c'est un plaisir)
....mais je ne trouve pas cela très propre.

Est-ce que qqun a une idée ou saurait où je pourrai trouver ces informations
?
Merci

Amicalement,
Posté le 26 février 2004 - 18:07
Salut !


On 26-Feb-2004, "dany" <dany@hotmail.com> wrote:

je cherche à passer un objet en paramètre d'une fenetre, et j'aimerai le
passer par valeur.
Explication:
1°) je crée un fenetre d'assistant dans lequel je crée un objet A
2°) une fois à la derniere étape de l'assistant, j'ouvre une fenetre soeur
à
laquelle je donne l'objet A créé en paramètre. (je le réaffecte à un
nouvel
objet B créé dans cette fenetre soeur en utilisant l'opérateur "=" :
objetA
= objetB)
3°) je ferme l'assistant

... sauf que je détruis l'objet créé A (normal) avec la fenetre assistant
mais aussi l'objet B car celui ci est passé par référence (et donc est
l'objet A finalement) et non par valeur.
J'ai trouvé plusieurs parades, entre autres :
- ne pas fermer l'assistant et le rendre invisible
- créer un nouvel objet dans la deuxieme fenetre et réaffecter attribut
par
attribut (avec + de 50 attributs, c'est un plaisir)
...mais je ne trouve pas cela très propre.


Ta fenêtreA détruit-elle explicitement l'objetA (libere objetA) ?
Si oui, change ton code de manière à ce que ce ne soit plus le cas.
Si je me rapelle bien, WD libère automatiquement les objets quand il n'y a
plus de pointeur pointant ( euh ... c'est leur rôle non ?) vers ces objets !
Dans ton cas, normalement, à la fermeture de la fenêtreB ...
A vérifier car pas testé !

Bien à toi

--
Marcel Berman
c/o Managing Business SPRL
Allée du Petit Paris, 11
B - 1410 - Waterloo
Tel : +32 2 351.60.64
Fax : +32 2 351.45.78
Gsm : +32 475.799.477
Posté le 26 février 2004 - 18:37
la syntaxe pour passer un paramétre par valeur est (monparametre). par exemple
:
Ouvre(fen2,(monobjeta))

"dany" <dany@hotmail.com> wrote:

bonjour,

je cherche à passer un objet en paramètre d'une fenetre, et j'aimerai le
passer par valeur.

Explication:
1°) je crée un fenetre d'assistant dans lequel je crée un objet A
2°) une fois à la derniere étape de l'assistant, j'ouvre une fenetre soeur

à
laquelle je donne l'objet A créé en paramètre. (je le réaffecte à un nouvel
objet B créé dans cette fenetre soeur en utilisant l'opérateur "=" : objetA
= objetB)
3°) je ferme l'assistant

... sauf que je détruis l'objet créé A (normal) avec la fenetre assistant
mais aussi l'objet B car celui ci est passé par référence (et donc est
l'objet A finalement) et non par valeur.
J'ai trouvé plusieurs parades, entre autres :
- ne pas fermer l'assistant et le rendre invisible
- créer un nouvel objet dans la deuxieme fenetre et réaffecter attribut

par
attribut (avec + de 50 attributs, c'est un plaisir)
...mais je ne trouve pas cela très propre.

Est-ce que qqun a une idée ou saurait où je pourrai trouver ces informations
?
Merci

Amicalement,


Posté le 26 février 2004 - 18:37
"dany" <dany@hotmail.com> wrote:

bonjour,

je cherche à passer un objet en paramètre d'une fenetre, et j'aimerai le
passer par valeur.

Explication:
1°) je crée un fenetre d'assistant dans lequel je crée un objet A
2°) une fois à la derniere étape de l'assistant, j'ouvre une fenetre soeur

à
laquelle je donne l'objet A créé en paramètre. (je le réaffecte à un nouvel
objet B créé dans cette fenetre soeur en utilisant l'opérateur "=" : objetA
= objetB)
3°) je ferme l'assistant

... sauf que je détruis l'objet créé A (normal) avec la fenetre assistant
mais aussi l'objet B car celui ci est passé par référence (et donc est
l'objet A finalement) et non par valeur.
J'ai trouvé plusieurs parades, entre autres :
- ne pas fermer l'assistant et le rendre invisible
- créer un nouvel objet dans la deuxieme fenetre et réaffecter attribut

par
attribut (avec + de 50 attributs, c'est un plaisir)
...mais je ne trouve pas cela très propre.

Est-ce que qqun a une idée ou saurait où je pourrai trouver ces informations
?
Merci

Amicalement,



Un objet ne peut pas être passé en paramètre par valeur, dans le sens ou
tu l'entends ! En effet, un variable objet n'est ni plus ni moins qu'un entier
long spécial puisque c'est l'adresse mémoire de l'instance de sa classe.
Donc si tu veux deux objet différents il faut dupliquer un à un toutes ses
propriétés !
Par contre, pour faire ce que tu souhaites, il faut simplement créer dans
ta deuxième fenetre un objet dynamique. Cela permet de ne pas créer une nouvelle
instance, et de l'assigner avec celui passé en paramètre :

Procedure Mafenetre(ObjAPasserEnParam)
MonObjB est un objet dynamique MaclasseObjA
....
MonObjB = ObjAPasserEnParam

Puis à la fermeture de cette fenetre tu ne libère pas l'objet MonObjB. Comme
c'est un objet dynamique windev ne le libèrera pas non plus. Et donc ta première
fenetre pourra toujours travail avec la même instance, et devra, par contre,
le libérer...
Voilà, c'est tout.
Posté le 27 février 2004 - 10:21
<Marcel.berman@managingbusiness.be> a écrit dans le message de
news:403e2c50$1@news.pcsoft.fr...

Salut !


On 26-Feb-2004, "dany" <dany@hotmail.com> wrote:

je cherche à passer un objet en paramètre d'une fenetre, et j'aimerai le
passer par valeur.
Explication:
1°) je crée un fenetre d'assistant dans lequel je crée un objet A
2°) une fois à la derniere étape de l'assistant, j'ouvre une fenetre

soeur
à
laquelle je donne l'objet A créé en paramètre. (je le réaffecte à un
nouvel
objet B créé dans cette fenetre soeur en utilisant l'opérateur "=" :
objetA
= objetB)
3°) je ferme l'assistant

... sauf que je détruis l'objet créé A (normal) avec la fenetre

assistant
mais aussi l'objet B car celui ci est passé par référence (et donc est
l'objet A finalement) et non par valeur.
J'ai trouvé plusieurs parades, entre autres :
- ne pas fermer l'assistant et le rendre invisible
- créer un nouvel objet dans la deuxieme fenetre et réaffecter attribut
par
attribut (avec + de 50 attributs, c'est un plaisir)
...mais je ne trouve pas cela très propre.

Ta fenêtreA détruit-elle explicitement l'objetA (libere objetA) ?
Si oui, change ton code de manière à ce que ce ne soit plus le cas.
Si je me rapelle bien, WD libère automatiquement les objets quand il n'y a
plus de pointeur pointant ( euh ... c'est leur rôle non ?) vers ces objets

!
Dans ton cas, normalement, à la fermeture de la fenêtreB ...
A vérifier car pas testé !

Bien à toi

--
Marcel Berman
c/o Managing Business SPRL
Allée du Petit Paris, 11
B - 1410 - Waterloo
Tel : +32 2 351.60.64
Fax : +32 2 351.45.78
Gsm : +32 475.799.477


J'avais effectivement créé l'objet de manière statique dans l'assistant, ce
qui le détruisait systématiquement lors de la fermeture. La création
dynamique résout le problème très simplement.
Un grand merci à tous ! :)