Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[WD 10] Menu contextuel

4 réponses
Avatar
JeAn-PhI
bonjour

j'ai créé plusieurs menus contextuels dans ma fenêtre.

ils s'ouvrent en cliquant sur des boutons on/off jusque là pas de pb.

en survol du bouton le menu s'ouvre automatiquement (j'ai réussi)

maintenant j'aimerais que le menu se ferme lorsque je ne survole plus
le bouton
dans l'aide il est précisé que la fonction ouvremenucontextuel est
bloquante pourtant il suffit de cliquer n'importe où dans la fenêtre
pour que le menu soit fermé

comment puis je faire ?

merci

--
Cordialement JeAn-PhI

4 réponses

Avatar
TLB
On 1 avr, 08:06, JeAn-PhI wrote:
bonjour

j'ai créé plusieurs menus contextuels dans ma fenêtre.

ils s'ouvrent en cliquant sur des boutons on/off jusque là pas de pb.

en survol du bouton le menu s'ouvre automatiquement (j'ai réussi)

maintenant j'aimerais que le menu se ferme lorsque je ne survole plus
le bouton
dans l'aide il est précisé que la fonction ouvremenucontextuel est
bloquante pourtant il suffit de cliquer n'importe où dans la fenêtre
pour que le menu soit fermé

comment puis je faire ?

merci

--
Cordialement JeAn-PhI


Bonjour,

"dans l'aide il est précisé que la fonction ouvremenucontextuel est
bloquante pourtant il suffit de cliquer n'importe où dans la fenêtre
pour que le menu soit fermé"
C'est le principe même des menus ctx.

Ce que je te propose (sans avoir vérifié !)
1) gérer une variable stockant objet et menu ctx ouverts en cours
2) gérer un évènement sur toute la fenêtre de façon à intercepte r le
survol
3) dans la procédure de l'évènement :
si survol (n'est pas un objet avec menu ctx) ou (menu ctx ouvert et
survol <>du menu ctx ouvert en cours) alors fermer le menu ctx ouvert.

Note si je puis me permettre : sauf des besoins spécifiques de ton
appli que j'ignore, le fait d'ouvrir et fermer automatiquement les
menus ctx en se promenant avec la souris produiront des effets visuels
fatigants, voire désagréables surtout s'il y en a beaucoup. Peut-être
serait-il judicieux de proposer cette fonction en option ?

Tim
Avatar
JeAn-PhI
TLB a formulé la demande :
On 1 avr, 08:06, JeAn-PhI wrote:
bonjour

j'ai créé plusieurs menus contextuels dans ma fenêtre.

ils s'ouvrent en cliquant sur des boutons on/off jusque là pas de pb.

en survol du bouton le menu s'ouvre automatiquement (j'ai réussi)

maintenant j'aimerais que le menu se ferme lorsque je ne survole plus
le bouton
dans l'aide il est précisé que la fonction ouvremenucontextuel est
bloquante pourtant il suffit de cliquer n'importe où dans la fenêtre
pour que le menu soit fermé

comment puis je faire ?

merci

--
Cordialement JeAn-PhI


Bonjour,

"dans l'aide il est précisé que la fonction ouvremenucontextuel est
bloquante pourtant il suffit de cliquer n'importe où dans la fenêtre
pour que le menu soit fermé"
C'est le principe même des menus ctx.

Ce que je te propose (sans avoir vérifié !)
1) gérer une variable stockant objet et menu ctx ouverts en cours
2) gérer un évènement sur toute la fenêtre de façon à intercepter le
survol
3) dans la procédure de l'évènement :
si survol (n'est pas un objet avec menu ctx) ou (menu ctx ouvert et
survol <>du menu ctx ouvert en cours) alors fermer le menu ctx ouvert.

Note si je puis me permettre : sauf des besoins spécifiques de ton
appli que j'ignore, le fait d'ouvrir et fermer automatiquement les
menus ctx en se promenant avec la souris produiront des effets visuels
fatigants, voire désagréables surtout s'il y en a beaucoup. Peut-être
serait-il judicieux de proposer cette fonction en option ?

Tim



mes menus émulent les menus de fenêtres car il n'est pas possible
d'avoir des menus avec le look que l'on veut, en effet j'utilise un
gabarit qui ne me permet pas de faire ce que je souhaite à savoir :
- avoir le bandeau en haut de fenêtre de la couleur de mon gabarit
(fond bleu écriture blanche)
- avoir le menus au look XP

il me manque simplement la méthode pour fermer un menu contextuel
ouvert

merci



--
Cordialement JeAn-PhI
Avatar
TLB
On 14 avr, 08:11, JeAn-PhI wrote:
TLB a formulé la demande :



> On 1 avr, 08:06, JeAn-PhI wrote:
>> bonjour

>> j'ai créé plusieurs menus contextuels dans ma fenêtre.

>> ils s'ouvrent en cliquant sur des boutons on/off jusque là pas de pb.

>> en survol du bouton le menu s'ouvre automatiquement (j'ai réussi)

>> maintenant j'aimerais que le menu se ferme lorsque je ne survole plus
>> le bouton
>> dans l'aide il est précisé que la fonction ouvremenucontextuel est
>> bloquante pourtant il suffit de cliquer n'importe où dans la fenêtr e
>> pour que le menu soit fermé

>> comment puis je faire ?

>> merci

>> --
>> Cordialement JeAn-PhI
> Bonjour,

> "dans l'aide il est précisé que la fonction ouvremenucontextuel est
> bloquante pourtant il suffit de cliquer n'importe où dans la fenêtre
> pour que le menu soit fermé"
> C'est le principe même des menus ctx.

> Ce que je te propose (sans avoir vérifié !)
> 1) gérer une variable stockant objet et menu ctx ouverts en cours
> 2) gérer un évènement sur toute la fenêtre de façon à interc epter le
> survol
> 3) dans la procédure de l'évènement :
> si survol (n'est pas un objet avec menu ctx) ou (menu ctx ouvert et
> survol <>du menu ctx ouvert en cours) alors fermer le menu ctx ouvert.

> Note si je puis me permettre : sauf des besoins spécifiques de ton
> appli que j'ignore, le fait d'ouvrir et fermer automatiquement les
> menus ctx en se promenant avec la souris produiront des effets visuels
> fatigants, voire désagréables surtout s'il y en a beaucoup. Peut-ê tre
> serait-il judicieux de proposer cette fonction en option ?

> Tim

mes menus émulent les menus de fenêtres car il n'est pas possible
d'avoir des menus avec le look que l'on veut, en effet j'utilise un
gabarit qui ne me permet pas de faire ce que je souhaite à savoir :
- avoir le bandeau en haut de fenêtre de la couleur de mon gabarit
(fond bleu écriture blanche)
- avoir le menus au look XP

il me manque simplement la méthode pour fermer un menu contextuel
ouvert

merci

--
Cordialement JeAn-PhI



Bon, j'ai essayé.
Pas de pb pour provoquer l'ouverture par survol.
Le pb, c'est effectivement qu'on ne peut pas provoquer la fermeture.
Un évènement branché sur survol de la souris ne donne rien, le menu
ctx bloque tout.
Je comprends maintenant ton pb et je pense que la solution reste dans
la gestion des évènements.
Windows ne peut pas se focaliser indéfiniment sur le menu et doit
continuer de gérer les autres évènements et notamment le clic en
dehors du menu qui provoque sa fermeture.
Je te suggère en ouverture de fenêtre évènement("proc",".*",0)
Ts les évènements seront envoyés ds proc.
Ds la procédure, étudier _eve.nom, _eve.lparam, _eve.wparam (trace) en
bougeant la souris.
Il doit y avoir une logique qd on quitte le champ dont le menu ctx est
ouvert qu'il faut trouver.
Je suis désolé de ne pas trouver mieux ... mais ton pb m'intéresse, je
chercherai donc de mon côté aussi.
Cordialement.
Avatar
TLB
On 14 avr, 18:03, TLB wrote:
On 14 avr, 08:11, JeAn-PhI wrote:



> TLB a formulé la demande :

> > On 1 avr, 08:06, JeAn-PhI wrote:
> >> bonjour

> >> j'ai créé plusieurs menus contextuels dans ma fenêtre.

> >> ils s'ouvrent en cliquant sur des boutons on/off jusque là pas de p b.

> >> en survol du bouton le menu s'ouvre automatiquement (j'ai réussi)

> >> maintenant j'aimerais que le menu se ferme lorsque je ne survole plus
> >> le bouton
> >> dans l'aide il est précisé que la fonction ouvremenucontextuel es t
> >> bloquante pourtant il suffit de cliquer n'importe où dans la fenê tre
> >> pour que le menu soit fermé

> >> comment puis je faire ?

> >> merci

> >> --
> >> Cordialement JeAn-PhI
> > Bonjour,

> > "dans l'aide il est précisé que la fonction ouvremenucontextuel es t
> > bloquante pourtant il suffit de cliquer n'importe où dans la fenêt re
> > pour que le menu soit fermé"
> > C'est le principe même des menus ctx.

> > Ce que je te propose (sans avoir vérifié !)
> > 1) gérer une variable stockant objet et menu ctx ouverts en cours
> > 2) gérer un évènement sur toute la fenêtre de façon à inte rcepter le
> > survol
> > 3) dans la procédure de l'évènement :
> > si survol (n'est pas un objet avec menu ctx) ou (menu ctx ouvert et
> > survol <>du menu ctx ouvert en cours) alors fermer le menu ctx ouvert.

> > Note si je puis me permettre : sauf des besoins spécifiques de ton
> > appli que j'ignore, le fait d'ouvrir et fermer automatiquement les
> > menus ctx en se promenant avec la souris produiront des effets visuels
> > fatigants, voire désagréables surtout s'il y en a beaucoup. Peut- être
> > serait-il judicieux de proposer cette fonction en option ?

> > Tim

> mes menus émulent les menus de fenêtres car il n'est pas possible
> d'avoir des menus avec le look que l'on veut, en effet j'utilise un
> gabarit qui ne me permet pas de faire ce que je souhaite à savoir :
> - avoir le bandeau en haut de fenêtre de la couleur de mon gabarit
> (fond bleu écriture blanche)
> - avoir le menus au look XP

> il me manque simplement la méthode pour fermer un menu contextuel
> ouvert

> merci

> --
> Cordialement JeAn-PhI

Bon, j'ai essayé.
Pas de pb pour provoquer l'ouverture par survol.
Le pb, c'est effectivement qu'on ne peut pas provoquer la fermeture.
Un évènement branché sur survol de la souris ne donne rien, le menu
ctx bloque tout.
Je comprends maintenant ton pb et je pense que la solution reste dans
la gestion des évènements.
Windows ne peut pas se focaliser indéfiniment sur le menu et doit
continuer de gérer les autres évènements et notamment le clic en
dehors du menu qui provoque sa fermeture.
Je te suggère en ouverture de fenêtre évènement("proc",".*",0)
Ts les évènements seront envoyés ds proc.
Ds la procédure, étudier _eve.nom, _eve.lparam, _eve.wparam (trace) en
bougeant la souris.
Il doit y avoir une logique qd on quitte le champ dont le menu ctx est
ouvert qu'il faut trouver.
Je suis désolé de ne pas trouver mieux ... mais ton pb m'intéresse, je
chercherai donc de mon côté aussi.
Cordialement.



J'ai bien peur qu'il n'y ait pas de solution.

En effet, en interceptant ts les messages il se trouve que windows
bloque complètement un menu ouvert.
ie, windows envoie les mêmes messages qu'on dedans ou hors du menu ctx
ouvert.
Donc impossible de savoir qu'on ne survole plus le menu ctx ouvert.
Seul un clic souris est intercepté par windows (ou clavier je
suppose).

Si j'ai bien compris, tu veux une barre de menus sans passer par
windows lui-même.
Peut-être que la solution résiderait dans l'écriture d'une routine de
ta conception sans passer par la gestion windev faisant appel aux
fonctions windows ?
.