PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 24 → Creer un menu contextuel dynamiquement
Creer un menu contextuel dynamiquement
Débuté par Eric F., 15 mai 2019 19:00 - 12 réponses
Membre enregistré
6 messages
Posté le 15 mai 2019 - 19:00
Bonjour,

je cherche à CREER dynamiquement un menu contextuel sur certaines tables de mon application, en fonction de certains critères.

Aujourd'hui, les tables de mon projet n'ont pas de menu contextuel personnalisé.
Je voudrai avoir un menu contextuel avec des options et du code qui seraient différents selon les cas.

Toutes les fonctions MenuAjouteXXXX demande en paramètre un menu contextuel déjà existant.

Existe-t-il un moyen de ne pas devoir ouvrir chacune des fenêtres du projet pour éditer un à un les menus contextuels et ajouter manuellement un menu ?

Merci de votre aide.

Eric
Membre enregistré
629 messages
Posté le 15 mai 2019 - 19:16
Bonjour,
J'ai été confronté au même problème.
Je l'ai résolu en créant un menu contextuel avec une seule option.
Je pouvais alors modifier ce menu par programmation

--
Il y a peut être plus simple, mais, ça tourne
Membre enregistré
6 messages
Posté le 17 mai 2019 - 08:57
Bonjour Voroltinquo.

Merci pour ta réponse.
Ensuite, tu clones l'option, etc... etc... c'est bien ça ?

Mais ce ce menu avec une seule option, tu as dû le créer manuellement depuis l'éditeur dans ta fenêtre.
Et mon projet comporte plus de 300 fenêtres....
Pour chacune d'entre-elles je vais devoir ouvrir la fenêtre, aller dans le menu "Fenêtre">>"Menu contextuel" puis cliquer sur "Nouveau", etc...

C'est là que j'aurai aimé trouver un moyen de m'éviter cette manipulation qui va me prendre plusieurs heures...

Eric
Membre enregistré
234 messages
Posté le 17 mai 2019 - 20:50
avec
champ..menucontextuel

tu peux changer les menu contextuel de n'importe quel champ ou fenetre normalement
et donc attribuer le meme menu a n'importe quelle fenetre, et le modifier selon test besoins
--
José
Message modifié, 17 mai 2019 - 20:51
Membre enregistré
6 messages
Posté le 19 mai 2019 - 21:32
Merci José de t'interesser à mon cas.

Mais si je fais matable..menucontextuel = MenuPerso Windev ne connait pas "MenuPerso". Sauf si je crée au préalable un nouveau menu contextuel dans ma fenêtre et que bien sûr, je le nomme "MenuPerso"

Comment utiliser un menu contextuel d'une autre fenêtre ?

Eric
Membre enregistré
234 messages
Posté le 19 mai 2019 - 23:06
effectivement, pas moyen de passer le menu d'une fenetre a une autre a priori
il te reste plus que des popus, ca marche bien aussi

--
José
Membre enregistré
6 messages
Posté le 20 mai 2019 - 10:47
Ok, merci José pour ton aide.

Une popup qui s'ouvrirait sur l'évènement clic-droit de mes tables ?
Mais je perdrai alors les menus "système" et "FAA" de mes tables....

Bon tant pis. je vais créer un menu contextuel à la main sur chaque fenêtre.

J'ai trouvé une manipulation qui va me faire gagner un petit peu de temps :
Dans une de mes fenêtres, i'ai créé un menu contextuel et un bouton auquel je lui ai associé ce menu contextuel.
Ensuite je fais un copier coller de ce bouton dans une autre fenêtre et je le supprime aussitôt.
Et bien, le menu contextuel est créé dans la seconde fenêtre, lors du "coller", mais n'est pas supprimé lors de suppression du bouton.

Je n'ai plus qu'à répéter 300 fois, 1 - ouvrir la fenêtre, 2 - coller le bouton, 3 - supprimer le bouton.
Heureusement que toutes mes fenêtres font déjà appel à une même procédure globale, je coderai dedans l'affectation du menu à toutes les tables trouvées dans la fenêtre en cours.

cordialement,

Eric
Membre enregistré
234 messages
Posté le 20 mai 2019 - 19:37
moi, j'utilise un menu popup que je peux afficher sur n'importe quel champ, n'importe quelle fenetre, ca marche bien
j'ai juste mis une zr dans le menu, et je la remplit a la volée avec une classe, puis je traite le retour.
ca me pose aucun pb a l'utilisation

--
José
Posté le 21 mai 2019 - 14:13
Bonjour,

PC-Soft préconise de passer par un modèle "vide". Bien lire l'aide sur
https://doc.pcsoft.fr/?1010013&name=partager_des_menus_contextuels_dans_projet

Bien à vous,
Fabrice De Weerd
www.fawax.com/dev

Le 15-05-19 à 17:00, Eric F. a écrit :
Bonjour,

je cherche à CREER dynamiquement un menu contextuel sur certaines tables
de mon application, en fonction de certains critères.

Aujourd'hui, les tables de mon projet n'ont pas de menu contextuel
personnalisé.
Je voudrai avoir un menu contextuel avec des options et du code qui
seraient différents selon les cas.

Toutes les fonctions MenuAjouteXXXX  demande en paramètre un menu
contextuel déjà existant.

Existe-t-il un moyen de ne pas devoir ouvrir chacune des fenêtres du
projet pour éditer un à un les menus contextuels et ajouter manuellement
un menu ?

Merci de votre aide.

Eric
Membre enregistré
6 messages
Posté le 21 mai 2019 - 16:34
Bonjour,

Merci Fabrice d'avoir trouvé cette référence dans l'aide de windev. Elle était bien cachée celle-là ! J'avais pourtant cherché avec les mots clés Menu contextuel, mais je n'étais pas tombé dessus.

A modifier chaque fenêtre, c'est en effet peut-être bien mieux d'appliquer un modèle "vierge" qui me permettra d'ajouter d'autres trucs dans le futur...

Mais, par contre, José, la solution du "menu popup" m'interpelle : c'est une simple fenêtre qui contient une ZR et qui se ferme en renvoyant une information sur l'item cliqué, c'est bien ça ?
Comment faire pour que ce "menu popup" soit affiché sur le clic-droit de certains objets d'une fenêtre ?
Par le biais de la fonction "evenement" sur WM_RBUTTONDOWN, n'est-ce pas ?
Mais alors, je perds le menu "système" avec les fonctions copier, coller, etc... non ?

Eric
Membre enregistré
234 messages
Posté le 21 mai 2019 - 22:31
sur une table, c'est le plus compliqué (ou une zr je pense, pas essayé)

a mettre dans le traitement relaché bouton droit

prov_ est un Champ // tu crees un champ provisoire
prov_ <- ChampCrée("Bidon", typLibellé, 30, 40, 140, 20) // peu importe test parametres

nIndiceLigne est un entier // ligne de ta table
renvoit est une chaîne
valeur_utile est une {variable_selon_besoin}


nIndiceLigne = TableInfoXY(MoiMême,tiNumLigne,SourisPosX(),SourisPosY()) // recupere la ligne de la table
valeur_utile=table_1.(colonne_utile)[nindiceligne] // recupere la valeur qu'il te faut pour envoyer en parametre a ta fenetre popup

prov_..X = SourisPosX()
prov_..Y = TABLE_1..Y + (nIndiceLigne+1-TablePosition(MoiMême)) * MoiMême..HauteurLigne
prov_..Largeur = 50 ( valeur SELON tes besoins)

renvoit = OuvrePopupPosition(FEN_op,poSelonChamp, prov_,(parametres))
ChampSupprime(prov_) // il faut supprimer ton champ sinon creation du meme champ au prochain clic et donc plantage

// ici tu geres ton retour

SELON renvoit
CAS 1
CAS 2
AUTRE CAS

FIN


et voila

--
José
Message modifié, 21 mai 2019 - 22:32
Membre enregistré
234 messages
Posté le 21 mai 2019 - 22:36
ton premier clic ouvrira le menu perso, le deuxième ouvrira le menu contextuel

--
José
Membre enregistré
6 messages
Posté le 22 mai 2019 - 12:09
ok,

tu utilises le "Relaché bouton clic droit"
ainsi tu as bien ton popup et aussi le menu système.

Merci pour ton aide.

cordialement,

Eric