Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Salut
J'ai une petit question sur une utilisation particulière des fenêtre et des menus.
Je travaille en PB 10.5 sous winXP
Voila je suis sur une appli qui utilise une fenêtre main(w_menu) à la place d'un MDI, associé à un menu (m_menu).
Dans ce menu, je peux ouvrir une autre fenêtre main (w_client) associé à un menu (m_client)
Comme vous l'imaginez, lorsque dans m_menu, j'ouvre la fenêtre client, je vais changer le menu en y plaçant le m_client.
Quand je souhaite quitter le fenêtre client, j'ai un bouton "quitter" qui appel un event de la feêtre w_client ue_quitter qui fonctionne à merveille avec le retour a mon menu de base.... Tout va bien.
Par contre dans le menu m_client, j'ai aussi un bouton quitter sous lequel il y avait du code en dur:
ParentWindow.changemenu(m_menu) fbm_gestion_profil_fin('m_menu','M',m_menu) close(w_clients)
Ca marche à merveille, mais le but est de supprimer le code spécifique pour faire appel au code de l'ue_quitter de ma fenêtre w_client...
Donc je crée une variable globale (gw_lastactive) qui est initialisée à chaque passage dans l'event activate d'une fenêtre:
gw_lastactive = this
ensuite dans mon menu, j'appelle
gw_lastactive.Event Dynamic ue_quitter()
ou
gw_lastactive.triggerevent( "ue_quitter")
et là rien ne fonctionne du tout....
D'ailleurs en essayant ceci
ParentWindow.changemenu(m_menu) fbm_gestion_profil_fin('m_menu','M',m_menu) close(gw_lastactive)
, il génère une erreur "nul object reference...."
En debug, la variable gw_lastactive est bien affectée, par contre
je passe par un globale car parentwindow de mon menu client est w_menu et non pas w_client....
Bref si quelqu'un a une idée....
Merci
Message de modération:
Dernière modification par Pilou007 (04-11-2008 08:51:07)
Hors ligne
Bonjour,
Si j'ai tous suivi, un simple PARENT.PostEvent("ue_quitter") dans ton menu devrait suffire.
Hors ligne
Non cela ne fonctionne pas car la fenetre parent du menu est w_menu, or je cherche a atteindre w_clients...
Merci tout de même...
Pilou
Hors ligne
Ok j'ai trouvé la raison de ce non fonctionnement...
En fait j'ai placé la variable gw_lastactive dans l'évènement activate de l'ancêtre, ce qui fait qu'elle n'est pas nulle, mais elle ne contient pas "correctement" la fenêtre active...
En la plaçant dans l'open de l'ancêtre ça fonctionne....
Si quelqu'un a une explication..... Je suis preneur...
Je clos le sujet
Merci
Pascal
Dernière modification par Pilou007 (04-11-2008 09:39:00)
Hors ligne
Bonjour,
Autant pour moi dans la précédente réponse, j'ai lu en diagonale.
Dans une application MDI, les fenêtres enfants doivent être ouverte avec les fonctions OpenSheet, OpenSheetWithParm.
Le comportement que tu décris ressemble à l'ouverture d'une fenêtre enfant avec un simple Open. Peux-tu le confirmer ?
Cordialement.
Hors ligne
Oui c'est cela, il n'y a pas de MDI
Donc la variable globale s'impose, par contre je ne comprends pas le comportement de l'évènement activate qui ne renseigne pas correctement ma variable globale...
Merci
Hors ligne
Bonjour,
Tu mets un breakpoint sur gw_lastactive = this dans l'événement activate. Tu ouvres une fois la fenêtre enfant avec Open et une fois OpenSheet.
L'événement activate n'est déclenché qu'avec une véritable application MDI, c'est à dire avec OpenSheet. En ouvrant la fenêtre avec Open en mode debug, tu verras que tu ne passes pas dans l'événement activate (uniquement avec OpenSheet).
Hors ligne
OK, Merci pour l'info..
@+
Pascal
Hors ligne