Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour
Petite question : est-ce que le clic droit sur une sheet est censée l'activer dans une application PB ?
Ce n'est pas le cas de celle sur laquelle je travaille ...
Quand j'ai deux fenêtres ouvertes, que la fenêtre A est active, je n'active pas la fenêtre B en cliquant droit dessus. Seul le clic gauche le permet.
Par ailleurs, quand je clique sur une autre application et que je clique droit sur une fenêtre inactive de mon application, mon application devient active mais par la fenêtre sur laquelle j'ai cliqué....
Pourtant, quand j'ouvre plusieurs fichiers sous le même Excel, quand je clique droit, j'ai bien la fenêtre sur laquelle je clique qui devient active
Du coup je me pose la question.... ça ne me parait pas du tout naturel comme comportement ... Est-ce du à mon framework douteux ( mais je n'en ai pas l'impression pour une fois) ou est ce que les applications Windows 98 () fonctionnaient comme ça.
En tous cas, ça fiche la grouille ce truc là, et je n'ai pas trouvé de fonction du style "SetActiveSheet"
Merciiiii
Hors ligne
Bonjour, setfocus() ?
Hors ligne
Bonjour,
Déjà essayé ça ne fonctionne pas ...
Il y a une différence quand la fenêtre a le focus et quand elle est active. La dw d'une fenêtre peut avoir le focus sans que la fenêtre soit active.
En fait, mon problème est le suivant : le menu de mon framework adoré exécute l'évènement de la fenêtre active.
Concrètement, quand vous avez 2 fenêtres ouvertes, que vous en activez une , puis que vous faites clic droit sur l'autre sans l'activer du coup, et que dans le menu contextuel vous cliquez sur, disons, soyons fou, supprimer, ça vous supprime les données de l'autre fenêtre
C'est très original mais aussi très caca !
J'aurais voulu trouver une solution sans avoir à reprendre le fonctionnement du framework adoré , parce que je m'en passerais bien !
Dernière modification par rapitou (22-04-2016 09:18:36)
Hors ligne
Bonjour,
tu ajoutes un nouvel évènement (RButtonDown par exemple) sur ta fenêtre que tu branches sur l'Event ID pbm_rbuttondown.
Tu y codes ensuite le THIS.setfocus( ).
Hors ligne
Bonjour !
C'était bien les vacances !
Comme je le disais dans mon message précédent, le setfocus() n'active pas la fenêtre. D'autre part, l'évènement rbuttondown existe déjà dans la fenêtre je ne vois pas pourquoi j'en créerais un nouveau ...
Et pour complexifier la chose, il faudrait que la fenêtre s'active quand je clique droit sur n'importe quelle objet de la fenêtre, pas seulement sur la fenêtre elle-même. La dessus je pense qu'une fois que j'aurai trouvé la solution, je m'en sortirai avec du récursif ...
En attendant je ne la vois pas, et ça me surprend que je n'ai pas remarqué ce comportement moisi pendant toutes ces années de PB ...
Hors ligne
Pour le rbuttondown, c'est exact, je croyais que c'était définit dans notre framework mais c'est natif sur une sheet, sorry.
Par contre, si j'y code un
This.setfocus( )
et que je définis un point de menu avec
w_frame_fw w_frame_act
w_frame_act = gnv_app.of_getframe( )
close(w_frame_act.getactivesheet( ))
Lorsque j'ouvre 2 sheets, que je fait un clic droit sur la sheet (et pas sur un objet de la sheet), la sheet vient au premier plan. Si ensuite j'active mon point de menu, elle se ferme bien.
Codes un MessageBox() dans l'event activate() de la sheet pour voir si tu y passes bien.
A mon tour, vacances jusque lundi .
Hors ligne
Salut
Effectivement le setfocus sur l'event rbuttondown permet d'activer la fenêtre ... mais il faut cliquer sur un endroit de la fenêtre qui n'est pas occupé par un objet, autant dire que ça n'arrive jamais ... Et cliquer droit sur le bandeau de la fenêtre n'active pas la fenêtre non plus ....
Bon au moins j'ai ma réponse le clic droit n'active rien du tout par défaut, c'est à moi de monter une usine à gaz pour arriver à mes fins.
Je vais coder le rbuttondown de chaque objet ancêtre pour qu'il appelle le rbuttondown de son contenant.
Et vu comme le framework est fichu je pense que je vais avoir des surprises en faisant un truc comme ça
Hors ligne
Salut,
votre fichu framework n'est pas basé sur les PFC/PFE par hasard ? Si oui, la fonction of_GetParentWindow(...) permet de retrouver la référence vers la sheet parent d'un objet.
Elle est codée dans chaque objet ancêtre.
Si non, voici le code trouvé dans l'ancêtre pfc_u_cb, ça devrait t'inspirer :
////////////////////////////////////////////////////////////////////////////// // // Function: of_GetParentWindow // // Access: public // // Arguments: // aw_parent The Parent window for this object (passed by reference). // If a parent window is not found, aw_parent is NULL // // Returns: integer // 1 = success // -1 = error // // Description: Calculates the parent window of a window object // ////////////////////////////////////////////////////////////////////////////// // // Revision History // // Version // 5.0 Initial version // ////////////////////////////////////////////////////////////////////////////// // // Copyright © 1996-1997 Sybase, Inc. and its subsidiaries. All rights reserved. // Any distribution of the PowerBuilder Foundation Classes (PFC) // source code by other than Sybase, Inc. and its subsidiaries is prohibited. // ////////////////////////////////////////////////////////////////////////////// powerobject lpo_parent lpo_parent = this.GetParent() // Loop getting the parent of the object until it is of type window! do while IsValid (lpo_parent) if lpo_parent.TypeOf() <> window! then lpo_parent = lpo_parent.GetParent() else exit end if loop if IsNull(lpo_parent) Or not IsValid (lpo_parent) then setnull(aw_parent) return -1 end If aw_parent = lpo_parent return 1
C'est clair que tu risques d'avoir des comportements surprenants .
Hors ligne
Bonjour,
Non le framework n'est pas basé sur les PFC ses créateurs ont choisi de faire du 100% fait maison, no comment
Merci pour le bout de code, maintenant on va voir comment ça se comporte !
Hors ligne