Quoi, tu ne connais pas PB ? Va falloir parcourir tout le forum alors !

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 21-04-2016 09:11:16

rapitou  
Membre Power Geek
Date d'inscription: 29-03-2007
Messages: 163
Pépites: 661
Banque: 0

Activer une sheet par clic droit

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

 

#2 21-04-2016 14:29:25

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

Re: Activer une sheet par clic droit

Bonjour, setfocus() ?


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

Hors ligne

 

#3 22-04-2016 08:40:59

rapitou  
Membre Power Geek
Date d'inscription: 29-03-2007
Messages: 163
Pépites: 661
Banque: 0

Re: Activer une sheet par clic droit

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

 

#4 25-04-2016 14:05:20

Geo  
Membre completement Geek
Lieu: Binche
Date d'inscription: 15-12-2008
Messages: 119
Pépites: 378
Banque: 0

Re: Activer une sheet par clic droit

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( ).


Rien ne sert de courir, il faut partir à point .

Hors ligne

 

#5 03-05-2016 07:56:31

rapitou  
Membre Power Geek
Date d'inscription: 29-03-2007
Messages: 163
Pépites: 661
Banque: 0

Re: Activer une sheet par clic droit

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

 

#6 03-05-2016 15:09:41

Geo  
Membre completement Geek
Lieu: Binche
Date d'inscription: 15-12-2008
Messages: 119
Pépites: 378
Banque: 0

Re: Activer une sheet par clic droit

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

Code: pb

This.setfocus( )

et que je définis un point de menu avec

Code: pb

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 .


Rien ne sert de courir, il faut partir à point .

Hors ligne

 

#7 09-05-2016 13:18:52

rapitou  
Membre Power Geek
Date d'inscription: 29-03-2007
Messages: 163
Pépites: 661
Banque: 0

Re: Activer une sheet par clic droit

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

 

#8 09-05-2016 13:57:17

Geo  
Membre completement Geek
Lieu: Binche
Date d'inscription: 15-12-2008
Messages: 119
Pépites: 378
Banque: 0

Re: Activer une sheet par clic droit

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 :

Code: pb

//////////////////////////////////////////////////////////////////////////////
//
//  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 .


Rien ne sert de courir, il faut partir à point .

Hors ligne

 

#9 12-05-2016 07:43:49

rapitou  
Membre Power Geek
Date d'inscription: 29-03-2007
Messages: 163
Pépites: 661
Banque: 0

Re: Activer une sheet par clic droit

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

 

Pied de page des forums

Propulsé par FluxBB 1.2.22