Répétez apres moi :J'aime PBAdonf. J'aime PBAdonf. J'aime PBAdonf.

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 13-12-2012 15:20:17

abdelta  
Bienfaitrice du site
Award: bf
Lieu: La Daguenière
Date d'inscription: 21-03-2007
Messages: 393
Pépites: 14,703
Banque: 9,223,372,036,854,776,000

[RESOLU] Pré-open

Bonjour,

Je ne sais pas si le sujet a déjà été abordé. J'ai une fenêtre parente w_main et plein de descendantes dont w_fiche_produit.
J'aurais besoin de lancer ue_mon_evenement qui est programmé dans w_main juste avant l'open de w_fiche_produit, à partir de w_fiche_produit (pour que le constructor soit fait et que les objets existent).

Je ne peux pas faire un postevent parce que j'ai des GetChild dans l'open de w_fiche_produit qui sont invalidés par les Modify de ue_mon_evenement. Il faut donc absolument que ue_mon_evenement soit lancé juste avant l'open.

J'espère avoir été claire dans ma demande, et que vous aurez des idées pour me sortir de là (des pépites en récompense pour chaque réponse, ça vous motive ? ).
Merci d'avance.

Dernière modification par abdelta (31-12-2012 08:36:36)


La sirène noire
http://www.nerdtests.com/images/badge/bf1f6c78865210a9.gif

Hors ligne

 

#2 13-12-2012 15:25:36

rincevent  
Modérateur
Award: bf
Lieu: Belgique
Date d'inscription: 06-02-2007
Messages: 722
Pépites: 100,002,023
Banque: 0

Re: [RESOLU] Pré-open

tu crée un ue_before_open dans w_main
tu codes l'appel de ue_before_open au tout début de l'open de w_main

tu codes dans w_fiche_produit.ue_before_open le code qui doit s'exécuter avant le code dans l'open

problem solved


http://img114.imageshack.us/img114/8519/userbar175801nb.gif
Pourquoi ne puis-je vivre comme n'importe quel être humain ? Pourquoi mon destin est-il de ne pouvoir cesser de me battre ?

Hors ligne

 

#3 13-12-2012 15:29:08

abdelta  
Bienfaitrice du site
Award: bf
Lieu: La Daguenière
Date d'inscription: 21-03-2007
Messages: 393
Pépites: 14,703
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Pré-open

Le soucis, avec ta solution, c'est que je vais devoir passer dans toutes mes fenêtres filles pour coder le ue_before_open ... !


La sirène noire
http://www.nerdtests.com/images/badge/bf1f6c78865210a9.gif

Hors ligne

 

#4 13-12-2012 15:42:04

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2487
Pépites: 88
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Pré-open

Et bien non, car il sera hérité automatiquement.
Par défaut, ce sera juste un événement qui ne fait rien dans les fenêtres filles, sauf si tu code dedans.
Beaucoup de framework sont codés ainsi (souvent, avec un pre-open et un post-open d'ailleurs)


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#5 13-12-2012 15:56:13

rincevent  
Modérateur
Award: bf
Lieu: Belgique
Date d'inscription: 06-02-2007
Messages: 722
Pépites: 100,002,023
Banque: 0

Re: [RESOLU] Pré-open

comme l'a bien expliqué foon, non, c'est justement l'avantage de l'héritage.


http://img114.imageshack.us/img114/8519/userbar175801nb.gif
Pourquoi ne puis-je vivre comme n'importe quel être humain ? Pourquoi mon destin est-il de ne pouvoir cesser de me battre ?

Hors ligne

 

#6 13-12-2012 16:03:47

abdelta  
Bienfaitrice du site
Award: bf
Lieu: La Daguenière
Date d'inscription: 21-03-2007
Messages: 393
Pépites: 14,703
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Pré-open

foon a écrit:

Et bien non, car il sera hérité automatiquement.

Dans ce cas, c'est w_main qui lancera l’évènement pre-open, et non les fenêtres filles. Ce qui fait que ma fenêtre fille ne sera pas encore instanciée, quand l'évènement sera appelé, non ?


La sirène noire
http://www.nerdtests.com/images/badge/bf1f6c78865210a9.gif

Hors ligne

 

#7 13-12-2012 16:14:14

rincevent  
Modérateur
Award: bf
Lieu: Belgique
Date d'inscription: 06-02-2007
Messages: 722
Pépites: 100,002,023
Banque: 0

Re: [RESOLU] Pré-open

Oufti, j'en connais une qui ferait bien de se replonger dans l'étude de la programmation orienté objet et spécialement du fonctionnement de l'héritage...

bonne chance pour la suite.


http://img114.imageshack.us/img114/8519/userbar175801nb.gif
Pourquoi ne puis-je vivre comme n'importe quel être humain ? Pourquoi mon destin est-il de ne pouvoir cesser de me battre ?

Hors ligne

 

#8 14-12-2012 08:28:02

abdelta  
Bienfaitrice du site
Award: bf
Lieu: La Daguenière
Date d'inscription: 21-03-2007
Messages: 393
Pépites: 14,703
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Pré-open

rincevent a écrit:

tu codes dans w_fiche_produit.ue_before_open le code qui doit s'exécuter avant le code dans l'open

Tu me disais bien de coder le ue_before_open dans w_fiche_produit, ou j'ai pas compris ce qui est écrit ?
Or, je ne veux pas passer dans toutes mes fenêtres filles (dont w_fiche_produit) pour coder cet évènement.

Si je mets dans w_main.open un TriggerEvent("ue_mon_evenement") et que je code tout ce que je veux exécuter avant l'open de w_fiche_produit dans le ue_mon_evenement de w_main, ça ne fonctionne pas parce qu'il faudrait que ce soit la fenêtre fille qui appelle ue_mon_evenement.

En gros, ce que je veux, c'est l'inverse d'un call SUPER::ue_mon_evenement pour pouvoir, à partir de la fenêtre w_main, appeler l’évènement de la fenêtre courante.


La sirène noire
http://www.nerdtests.com/images/badge/bf1f6c78865210a9.gif

Hors ligne

 

#9 14-12-2012 09:02:55

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2487
Pépites: 88
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Pré-open

Pourquoi veux-tu coder cet évènement dans toutes les fenêtre filles?
Si tu n'en a besoin que dans w_fiche_produit, tu le codes dans cette fenêtre. Dans les fenêtres filles et dans w_main,
le ue_before_open reste vide, et donc n'exécutera pas l'appel à ton fameux ue_mon_evenement, qui ne semble exister que dans w_fiche_produit, si j'ai bien compris.
ou alors, il faut que tu nous expliques mieux ta problématique, parceque ça ne semble pas très clair.

Pour résumer:
Dans w_main, tu créés l'événement "ue_before_open", dans lequel tu ne mets rien.
Toujours dans w_main, tu codes au début de l'événement open le triggerevent de "ue_before_open"

Tu compiles...

Et dans w_fiche_produit (qui hérites de w_main), tu codes dans l'événement ue_before_open le triggerevent de "ue_mon_evenement"

Et voilà, c'est tout.


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#10 14-12-2012 09:18:42

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [RESOLU] Pré-open

j'ai l'impression que w_main est la MDI et non pas la sheet ancêtre... ou bien ?


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#11 14-12-2012 09:32:10

abdelta  
Bienfaitrice du site
Award: bf
Lieu: La Daguenière
Date d'inscription: 21-03-2007
Messages: 393
Pépites: 14,703
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Pré-open

foon a écrit:

il faut que tu nous expliques mieux ta problématique, parceque ça ne semble pas très clair.

Effectivement, je n'ai pas dû bien m'expliquer. Il faut que ue_mon_evenement soit lancé dans toutes les fenêtres filles au début de l'open.


La sirène noire
http://www.nerdtests.com/images/badge/bf1f6c78865210a9.gif

Hors ligne

 

#12 14-12-2012 10:08:24

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: [RESOLU] Pré-open

abdelta a écrit:

foon a écrit:

il faut que tu nous expliques mieux ta problématique, parceque ça ne semble pas très clair.

Effectivement, je n'ai pas dû bien m'expliquer. Il faut que ue_mon_evenement soit lancé dans toutes les fenêtres filles au début de l'open.

erasorz a écrit:

j'ai l'impression que w_main est la MDI et non pas la sheet ancêtre... ou bien ?

Comme erasorz, je me demande si il existe une fenêtre ancêtre à toutes les fenêtres pour lesquelles tu voudrais avoir un évènement commun avant l'ouverture, ou si tu nous parle de la fenêtre parent de ton application.

Si il n'existe pas d'ancêtre, il est encore possible de le créer après coup et de modifier le code des descendants pour se rattacher à cet ancêtre (remplacer le "from window" en "from mon_ancetre" à 2 endroit au début du code source des fenêtres).


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#13 14-12-2012 10:09:55

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2487
Pépites: 88
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Pré-open

Dans ton ue_mon_evenement, tu dois bien avoir des tâches à effectuer communes à toutes tes fenêtres, et d'autres spécifiques?
L'idéal, c'est de coder dans le ue_mon_evenement de w_main tout ce qui est commun à tes fenêtres descendantes, et tu étends le script
de l'évenement dans les fenêtres filles pour ce qui est du spécifique.
Ca implique de repasser dans certaines fenêtres filles, mais pas dans toutes,
si tu te débrouilles bien.


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#14 14-12-2012 10:11:27

abdelta  
Bienfaitrice du site
Award: bf
Lieu: La Daguenière
Date d'inscription: 21-03-2007
Messages: 393
Pépites: 14,703
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Pré-open

seki a écrit:

Comme erasorz, je me demande si il existe une fenêtre ancêtre à toutes les fenêtres pour lesquelles tu voudrais avoir un évènement commun avant l'ouverture, ou si tu nous parle de la fenêtre parent de ton application.

Oui, ma fenêtre w_main est bien l'ancêtre de toutes mes fenêtres filles. J'ai aussi une fenêtre MDI, mais elle ne m'intéresse pas dans mon problème, c'est pourquoi je n'y ai pas fait allusion.


La sirène noire
http://www.nerdtests.com/images/badge/bf1f6c78865210a9.gif

Hors ligne

 

#15 14-12-2012 10:14:25

abdelta  
Bienfaitrice du site
Award: bf
Lieu: La Daguenière
Date d'inscription: 21-03-2007
Messages: 393
Pépites: 14,703
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Pré-open

foon a écrit:

Dans ton ue_mon_evenement, tu dois bien avoir des tâches à effectuer communes à toutes tes fenêtres, et d'autres spécifiques?
L'idéal, c'est de coder dans le ue_mon_evenement de w_main tout ce qui est commun à tes fenêtres descendantes, et tu étends le script
de l'évenement dans les fenêtres filles pour ce qui est du spécifique. ca implique de repasser dans certaines fenêtres filles, mais pas dans toutes,
si tu te débrouilles bien.

Tout est commun, puisque tout est dynamique. Je récupère les colonnes des datawindows de la fenêtre fille, et je fais des Modify dessus, d'où l'intérêt de le faire dans l'ancêtre.


La sirène noire
http://www.nerdtests.com/images/badge/bf1f6c78865210a9.gif

Hors ligne

 

#16 14-12-2012 10:34:08

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2487
Pépites: 88
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Pré-open

Tu n'aurais pas object ancêtre pour tes datawindows, genre uo_dw?
Parcequ'à mon avis, ce serait plus simple de coder dans l'événement constructor tes modifys.


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#17 14-12-2012 11:40:17

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: [RESOLU] Pré-open

abdelta a écrit:

Je ne peux pas faire un postevent parce que j'ai des GetChild dans l'open de w_fiche_produit qui sont invalidés par les Modify de ue_mon_evenement. Il faut donc absolument que ue_mon_evenement soit lancé juste avant l'open.

Tu fais des GetChild() à l'ouverture que tu stockes en variable d'instance ?
Si c'est le cas, xlat me faisait remarquer que c'est mal : il vaut mieux toujours faire le GetChild au moment où tu as besoin d'accéder au child.

Confirmé par la doc de GetChild : la référence retournée par GetChild peut devenir invalide par la suite.

F1 a écrit:

Changing property values with the Modify method can cause the reference returned by GetChild to become invalid. After setting such a property, call GetChild again. If a property causes this behavior, it is noted in its description in Chapter 3, "DataWindow Object Properties".


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#18 14-12-2012 13:03:11

abdelta  
Bienfaitrice du site
Award: bf
Lieu: La Daguenière
Date d'inscription: 21-03-2007
Messages: 393
Pépites: 14,703
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Pré-open

seki a écrit:

Tu fais des GetChild() à l'ouverture que tu stockes en variable d'instance ?
Si c'est le cas, xlat me faisait remarquer que c'est mal : il vaut mieux toujours faire le GetChild au moment où tu as besoin d'accéder au child.

Oui, je fais des getchild que je mets dans des variables d'instance ; enfin, le client a fait ça il y a longtemps et je ne me vois pas tout reconcevoir. J'essaie justement de ne pas modifier toutes les fenêtres, c'est pour ça que j'essaie de passer mon évènement dans le w_main.

Je suis sur une piste pour arriver à mes fins, je vous tiendrai au courant dès que ce sera fait.


La sirène noire
http://www.nerdtests.com/images/badge/bf1f6c78865210a9.gif

Hors ligne

 

#19 31-12-2012 08:36:11

abdelta  
Bienfaitrice du site
Award: bf
Lieu: La Daguenière
Date d'inscription: 21-03-2007
Messages: 393
Pépites: 14,703
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Pré-open

abdelta a écrit:

je ne me vois pas tout reconcevoir. J'essaie justement de ne pas modifier toutes les fenêtres, c'est pour ça que j'essaie de passer mon évènement dans le w_main.

Finalement, le client préfère suivre les préconisations de PowerBuilder, je repasse donc sur toutes les fenêtres descendantes de ma w_main pour ne plus enregistrer les GetChild dans des variables d'instance.

Merci à tous.


La sirène noire
http://www.nerdtests.com/images/badge/bf1f6c78865210a9.gif

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22