Minibug
Nombre de messages : 4566 Age : 57 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Clics droit, gauche et double clic dans un même menu Sam 11 Mar 2017 - 16:52 | |
| Suite au code de Silverman, j'ai simplifié et amélioré pour arrivé a n'utiliser qu'un seul traitement. et voila ce que cela donne sans aucun timer et avec un menu contextuel en prime ! Pour convenir a tous et suite a des posts récents j'ai largement documenté le code. Pour le menu contextuel vous pouvez aussi rajouter les images comme indiqué dans le programme. Pour le doucle clic c'est uniquement sur le FORM 0 - Spoiler:
- Code:
-
' ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ' GESTION DES CLICS GAUCHE ET DROIT DANS UN SEUL MENU AVEC EXEMPLE D'UN MENU CONTEXTUEL (CLIC DROIT) INCLUS ' PAR LAURENT ALIAS MINIBUG ' --------------------------------------------------------------------------------------------------------------------------------------------------------------------------
' INITIALISATION DES LABELS ET VARIABLES LABEL menu , move
DIM n% : ' utilisé dans la boucle pour créer le nombre de lignes du menu contextuel DIM nb% : ' Permet la numérotation automatique des objets DIM PANEL% : ' Nomme l'objet PANEL 1 pour pouvoir le reconnaitre dans le programme DIM h% : ' Contient la hauteur du PANEL en fonction des éléments (DATAs) DIM t$ : ' Permet le chargement de chaque DATA dans la boucle DIM d% : ' Permet la gestion du secondes pour le double clic
' --------------------------------------------------------------------------------------------------------------------------------------------------------------------------
' Formatage des paramètres du menu contextuel DATA "Ouvrir fichier" , "Sauvegarder fichier" , "_" , "Fermer fichier" ,"_" , "Quitter" : ' Ligne du menu contextuel
' --------------------------------------------------------------------------------------------------------------------------------------------------------------------------
HIDE 0 : ' On cache tout avant l'affichage complet
' Création du menu contextuel nb%=1 : ' nb% permet de numéroter automatiquement des objets PANEL nb% : HIDE nb% : PARENT nb%,0 : HEIGHT nb%,114 : COLOR nb%,240,240,240 : ' PANEL 1 servant de conteneur pour le menu contextuel PANEL%=nb% : nb%=nb%+1 : ' Nomme PANEL 1 par PANEL% et initialisation de hauteur du PANEL 1 h%=h%+5
FOR n%=1 TO 6 : ' Boucle permetant la création des lignes du menu contextuel ALPHA nb% : PARENT nb%,PANEL% : FONT_COLOR nb%,0,0,0 : TOP nb%,h% : FONT_NAME nb%,"Segoe UI" : ' Création de la ligne de texte et READ t$ : ' chargement du DATA t$ IF t$="_" : ' Si t$="_" c'est donc un séparateur (ligne vide) FONT_SIZE nb%,3 : TOP nb%,h% : ' Met la police au mini pour créer des lignes séparatrices WHILE TEXT_WIDTH(t$,nb%)<WIDTH(1)-10 : t$=t$+"_" : LEFT nb%,5 : END_WHILE : ' Création de la ligne séparatrice CAPTION nb%,t$ : INACTIVE nb% : nb%=nb%+1 : h%=h%+12 : ' Affiche et désactive la ligne pour ne pas la sélectionner ELSE : ' Sinon c'est un menu avec un texte FONT_SIZE nb%,9 : ' Met la police à la taille normale WHILE TEXT_WIDTH(t$,nb%)<WIDTH(1)-35 : t$=t$+" " : LEFT nb%,30 : CAPTION nb%,t$ : END_WHILE : ' Création de la ligne de texte et affichage ON_MOUSE_UP nb%,menu : nb%=nb%+1 : ' et activation du clic PICTURE nb% : PARENT nb%,PANEL% : LEFT nb%,4 : TOP nb%,h% : WIDTH nb%,17 : HEIGHT nb%,17 : ' Création de l'icone sur la partie de gauche ' FILE_LOAD nb%,"D:\BASIC\GPP\sys\img\ico1"+RIGHT$("00"+STR$(n%),2)+".bmp" : ' Chargement de l'image au format bmp STRETCH_ON nb% : ON_MOUSE_UP nb%,menu : nb%=nb%+1 : h%=h%+20 : ' et ajustement avec activation du clic END_IF : ' Fin du traitement NEXT n% : ' Fin de la boucle
' Détection du clic ou du déplacement sur le form 0 ON_MOUSE_UP 0,menu : ON_MOUSE_MOVE 0,move : ' Activation du clic et gestion du déplacement sur FORM 0
SHOW 0 : ' Affichage de la fenêtre
END : ' Fin du programme
' --------------------------------------------------------------------------------------------------------------------------------------------------------------------------
menu: : ' sous-programme MENU ' Gestion des clics gauches du menu contextuel et affichage des messages IF MOUSE_LEFT_UP(2)=1 OR MOUSE_LEFT_UP(3)=1 THEN HIDE 1 : CAPTION 0, "Ouvrir fichier" : ' Si clic de gauche sur ALPHA 2 ou PICTURE 3 alors on affiche ... IF MOUSE_LEFT_UP(4)=1 OR MOUSE_LEFT_UP(5)=1 THEN HIDE 1 : CAPTION 0, "Sauvegarder fichier" : ' Si clic de gauche sur ALPHA 4 ou PICTURE 5 alors on affiche ... IF MOUSE_LEFT_UP(7)=1 OR MOUSE_LEFT_UP(8)=1 THEN HIDE 1 : CAPTION 0, "Fermer fichier" : ' Si clic de gauche sur ALPHA 7 ou PICTURE 8 alors on affiche ... IF MOUSE_LEFT_UP(10)=1 OR MOUSE_LEFT_UP(11)=1 THEN HIDE 1 : TERMINATE : ' Si clic de gauche sur ALPHA 10 ou PICTURE 11 alors on affiche .. : ' (PS : ALPHA 3 et ALPHA 6 sont les lignes inactives donc pas de clic) ' Gestion du clic gauche ou double clic gauche sur Form 0 IF MOUSE_LEFT_UP(0)=1 THEN CAPTION 0,"Clic droit sur le Form 0" : ' Si clic de gauche sur FORM 0 alors on affiche ...
IF DOUBLE_CLICKED(0)=1 THEN CAPTION 0,"Double clic droit sur le Form 0" :' Si double clic droit sur FORM 0 alors on affiche ...
' Gestion du clic droit et affichage du menu contextuel IF MOUSE_RIGHT_UP(0)=1 AND SHOW(1)=0 : ' Si clic de droite sur FORM 0 on positionne et affiche PANEL 1 LEFT 1,MOUSE_X_POSITION(0)-5 : TOP 1,MOUSE_Y_POSITION(0)-5 : SHOW 1 : ' Affichage du menu contextuel END_IF : ' Fin RETURN : ' Fin du sous-programme
move: : ' sous-programme MOVE HIDE 1 : ' Si déplacement détecté sur FORM 0 on cache le menu contactuel (PANEL) RETURN : ' Fin du sous-programme
Dernière édition par Minibug le Mer 29 Mai 2019 - 17:50, édité 5 fois | |
|
silverman
Nombre de messages : 968 Age : 51 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Clics droit, gauche et double clic dans un même menu Sam 11 Mar 2017 - 19:04 | |
| Superbe, ça marche presque bien! En effet, if faut placer les détections d'évènement juste avant 'end'; Si tu lances ton code et que tu bouges aussitôt la souris, 'on_mouse_move' déclenche un évènement avant que le menu contextuel ne soit terminé d'être construit ---->plantage. 'on_mouse_move' est une commande très pratique, mais à utiliser avec précaution: - Code:
-
label move
on_mouse_move 0,move END
move: pause 20 caption 0,str$(number_events) :' <---- toujours à 0, bug? end Une fois lancé, bouge la souris sur le form 0 puis ferme le en cliquant sur la croix ---->plantage! Sinon, pour le double click, pourquoi tu n'utilises pas la fonction 'double_clicked()'? | |
|
Yannick
Nombre de messages : 8610 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 12 Mar 2017 - 3:36 | |
| Pour éviter ce genre de souci, je mets "HIDE 0" en début de code et "SHOW 0" avant le "END".
Cela évite la détection sur des objets qui ne sont pas encore créés. Et pour la commande ON_RESIZE N,L je la place en fin de code du form 0. Sinon, cà plante. | |
|
Minibug
Nombre de messages : 4566 Age : 57 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Clics droit, gauche et double clic dans un même menu Dim 12 Mar 2017 - 7:36 | |
| Merci Silverman et Yannick pour ces retours ! C'est corrigé. Comme ça plus de plantage. Concernant le double click, il me semblait qu'auparavant il y avait un problème avec cette commande. J'ai changé avec DOUBLE_CLICKED() et ça fonctionne parfaitement. Merci. | |
|
papydall
Nombre de messages : 7004 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Clics droit, gauche et double clic dans un même menu Dim 12 Mar 2017 - 13:18 | |
| Vous pouvez utiliser BlockInput de la user32.dllPour savoir comment l’utiliser, rendez-vous ici. | |
|
Minibug
Nombre de messages : 4566 Age : 57 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Clics droit, gauche et double clic dans un même menu Dim 12 Mar 2017 - 14:39 | |
| Merci Papydall.
J'ai vu ton post... Effectivement cela peut être très utile. A conserver précieusement ! | |
|
Yannick
Nombre de messages : 8610 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 12 Mar 2017 - 14:40 | |
| C' est bon à savoir. Maintenant il va falloir que je m' en souvienne et... ...c' est pas gagné ! | |
|
papydall
Nombre de messages : 7004 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Clics droit, gauche et double clic dans un même menu Dim 12 Mar 2017 - 15:27 | |
| - Yannick a écrit:
- C' est bon à savoir.
Maintenant il va falloir que je m' en souvienne et... ...c' est pas gagné !
C'est pourquoi je l'ai posté dans un autre sujet plus facile à trouver si besoin est. | |
|
Contenu sponsorisé
| Sujet: Re: Clics droit, gauche et double clic dans un même menu | |
| |
|