Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Clic droit | |
| | Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Clic droit Mer 7 Fév 2018 - 13:45 | |
| Je regrette toujours que le ON_CLICK sur un objet ne réagisse pas indifféremment au clic gauche et au clic droit, à charge pour l'utilisateur, si nécessaire, de faire la distinction avec les fonctions adéquates (Mouse_Left_Down ou Mouse_Right_Down). J'ai une LIST d'élements, et je voudrais faire des traitements différents suivant le click: - donner des infos sur l'élément sur clic droit - sélectionner l'élément sur clic gauche. Un palliatif: une sub qui surveille en permanence le clic droit sur un objet (ici LIST) donné. La sub est lancée au début du programme, et surveille en permanence le clic droit sur le List. Si clic droit, lancement d'un sous-programme de traitement, puis relance de la surveillance. En 'dur' dans la sub: le nom du sous-programme à lancer si détection (ici 'Rclick') NB: la sub tient compte du défilement du LIST dans sa fenêtre et donne l'index absolu cliqué (grâce à une fonction de User32.dll que j'ai sûrement récupérée ici). Un exemple (juste pour voir, avec un fichier texte quelconque dans la LIST): - Code:
-
LABEL Quit,Gclick,Rclick DIM i% HEIGHT 0,SCREEN_Y-30: ON_CLOSE 0,Quit: COLOR 0,128,255,255 LIST 10: WIDTH 10,500: HEIGHT 10,HEIGHT_CLIENT(0)-30 ON_CLICK 10,Gclick DLIST 11 BUTTON 15: TOP 15,HEIGHT_CLIENT(0)-26: LEFT 15,WIDTH(0)/2-40 CAPTION 15,"Quitter": ON_CLICK 15,Quit file_load 11,"C:\Textes\Annu.txt" FOR i% = 1 TO COUNT(11): ITEM_ADD 10,STR$(i%)+"_ "+ITEM_READ$(11,i%): NEXT i% RightClick(10) END ' ============================================================================== Quit: TERMINATE RETURN ' ============================================================================== Gclick: ' click gauche Message item_index$(10) RETURN ' ============================================================================== Rclick: ' click droit i% = VAL(CLIPBOARD_STRING_PASTE$) message "Clic droit index "+STR$(i%)+": "+ITEM_READ$(10,i%) RETURN ' ============================================================================== SUB RightClick(lst%) ' Détection du click droit sur un objet LIST lst% ' Dans ce cas, branchement sur le s/p 'Rclick', avec dans le presse-papier ' l'index de l'élément cliqué du List. IF VARIABLE("hlig%") = 0 THEN DIM hlig% IF VARIABLE("prem%") = 0 THEN DIM prem% IF VARIABLE("LB_GETITEMHEIGHT%")=0 THEN DIM LB_GETITEMHEIGHT% IF VARIABLE("LB_GETTOPINDEX%")=0 THEN DIM LB_GETTOPINDEX% DIM_LOCAL i% WHILE 2>1: ' boucle sans fin WHILE MOUSE_RIGHT_DOWN(lst%) = 0: PAUSE 100: END_WHILE: ' attente de clic droit WHILE MOUSE_RIGHT_UP(lst%) = 0: PAUSE 50: END_WHILE: ' attente relâchement LB_GETITEMHEIGHT% = 417 LB_GETTOPINDEX% = 398 DLL_ON "User32" hlig% = DLL_CALL4("SendMessageA",HANDLE(lst%),LB_GETITEMHEIGHT%,0,0) prem% = DLL_CALL4("SendMessageA",HANDLE(lst%),LB_GETTOPINDEX%,0,0) DLL_OFF ' -> hlig% = hauteur en pixel d'une ligne du LIST ' prem% = index du 1er élément visible du LIST (pour défilement éventuel) i% = 1+INT(MOUSE_Y_POSITION(10)/hlig%): ' position dans la partie visible de List i% = prem%+i%: ' index absolu du list cliqué CLIPBOARD_STRING_COPY STR$(i%): ' -> clipboard GOSUB Rclick END_WHILE END_SUB ' ==============================================================================
Dernière édition par JL35 le Mer 7 Fév 2018 - 15:32, édité 1 fois | |
| | | Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: Clic droit Mer 7 Fév 2018 - 14:35 | |
| Je comprends ton problème, mais le ON_CLICK ne réagit pas seulement à un clic de souris ! En fait, le ON_CLICK est n'est pas lié à l'utilisation de la souris.
Par exemple, un BUTTON qui a le focus va réagir au ON_CLICK si on appuie sur la touche ESPACE du clavier ou sur la touche ENTER. Et dans ce cas, il sera impossible de distiguer un clic droit d'un clic gauche de la souris, puisque la souris n'entre pas en jeu.
Tu mentionnes un LIST. Or, si tu crées des items dans ce LIST (par ITEM_ADD), quand ce LIST a le focus, sélectionner des items avec les touches fléchées du clavier déclenche l'événement ON_CLICK. Et c'est exactement pareil, il sera impossible de distiguer un clic droit d'un clic gauche de la souris, puisque la souris n'entre pas en jeu.
Je ne parle même pas de l'utilisation sous Android où il n'y a pas de souris. (smartphone, tablette, etc) _________________ username : panoramic@jack-panoramic password : panoramic123 | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Clic droit Mer 7 Fév 2018 - 14:54 | |
| Effectivement, je comprends bien le problème... plus contraignant que ce que je pensais au premier abord. (Pour moi un bouton n'est activé qu'au clic souris, et le choix d'un item dans un List se fait aussi à la souris, mais c'est vrai que s'il n'y a pas de souris...)
Alors il me faut bien trouver un artifice pour prendre en compte ce fichu clic droit qui est bien utile dans le cas que je citais plus haut, déclencher deux actions différentes en fonction du bouton cliqué. Il y a bien une solution de surveillance avec un timer, que j'utilise également, mais le timer... c'est parfois un peu délicat à utiliser. L'exemple que j'ai mis là-haut ne me convient que modérément, mais bon... ça peut être une piste pour d'autres.
En tout cas, bonne journée ! (ici sous la neige, assez inhabituel !) | |
| | | silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Clic droit Mer 7 Fév 2018 - 18:46 | |
| Tu peux faire comme ça, ça fait exactement ce que tu veux: - Code:
-
LABEL Quit,Gclick,Rclick DIM i%,lst% HEIGHT 0,SCREEN_Y-30: ON_CLOSE 0,Quit: COLOR 0,128,255,255 LIST 10: WIDTH 10,500: HEIGHT 10,HEIGHT_CLIENT(0)-30 ON_CLICK 10,Gclick on_mouse_up 10,Rclick :' clic droit
DLIST 11 BUTTON 15: TOP 15,HEIGHT_CLIENT(0)-26: LEFT 15,WIDTH(0)/2-40 CAPTION 15,"Quitter": ON_CLICK 15,Quit file_load 11,"C:\Textes\Annu.txt" FOR i% = 1 TO COUNT(11): ITEM_ADD 10,STR$(i%)+"_ "+ITEM_READ$(11,i%): NEXT i% END ' ============================================================================== Quit: TERMINATE RETURN ' ============================================================================== Gclick: ' click gauche Message item_index$(10) RETURN ' ============================================================================== Rclick: lst%=10 if mouse_left_down(lst%)=0 ' click droit IF VARIABLE("hlig%") = 0 THEN DIM hlig% IF VARIABLE("prem%") = 0 THEN DIM prem% IF VARIABLE("LB_GETITEMHEIGHT%")=0 THEN DIM LB_GETITEMHEIGHT% IF VARIABLE("LB_GETTOPINDEX%")=0 THEN DIM LB_GETTOPINDEX% LB_GETITEMHEIGHT% = 417 LB_GETTOPINDEX% = 398 DLL_ON "User32" hlig% = DLL_CALL4("SendMessageA",HANDLE(lst%),LB_GETITEMHEIGHT%,0,0) prem% = DLL_CALL4("SendMessageA",HANDLE(lst%),LB_GETTOPINDEX%,0,0) DLL_OFF ' -> hlig% = hauteur en pixel d'une ligne du LIST ' prem% = index du 1er élément visible du LIST (pour défilement éventuel) i% = 1+INT(MOUSE_Y_POSITION(10)/hlig%): ' position dans la partie visible de List i% = prem%+i%: ' index absolu du list cliqué item_select lst%,i% CLIPBOARD_STRING_COPY STR$(i%): ' -> clipboard
i% = VAL(CLIPBOARD_STRING_PASTE$) message "Clic droit index "+STR$(i%)+": "+ITEM_READ$(10,i%) end_if RETURN ' ==============================================================================
EDIT : Le code n'est pas commenté car je suis pressé par le temps | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Clic droit Mer 7 Fév 2018 - 19:16 | |
| Ton problème rentre exactement dans le cas de ce qui est traité dans KGF.dll dans la section "Interception des clics sur un objet" Tu utilises - Code:
-
dim res%, hnd%, hndpos% memo 10 : hnd% = handle(10) edit 20 : hndpos% = handle(20) : hide 20 ' intercepter les évènements sur le mémo et signaler les coordonnées res% = dll_call2("ClickSetHook",hnd%,hndpos%)
pour indiquer à la DLL que l'éléments 20 (à titre d'exemple) sont à charger avec des informations concernant l'évènement à capter. sur le mémo 10. Puis, tu utilises - Code:
-
dim res%, hnd_button% button 30 : hnd_button% = handle(30) : hide 30 ' lier le click droit au bouton 30 res% = dll_call2("ClickSetLink",hnd_button%,3)
pour déclencher le bouton 30 (à titre d'exemple, toujours) lorsque le clic droit est utilisé sur le mémo 10. Tu remplaces alors le mémo de cet exemple par ton objet LIST, tu n'utilises plus le ON_CLICK sur ce LIST, mais tu utilises le ON_CLICK sur le bouton invisible (30 dans cet exemple) à la place. Et voilà - ce ON_CLICK ne se déclenchera que sur un clic droit dans la LIST. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Clic droit Mer 7 Fév 2018 - 19:18 | |
| Super silverman ! Effectivement, ta solution est plus élégante, je n'avais pas du tout pensé au ON_MOUSE_UP qui change tout, puisque cette instruction (ainsi que ON_MOUSE_DOWN) réagit aussi bien au bouton droit qu'au bouton gauche de la souris, il fallait y penser ! J'adopte, merci l'ami !
Bonsoir Klaus, on s'est croisés. Je sais évidemment qu'il y a une solution simple avec KGF.dll, mais je cherchais en tout panoramic. KGF.dll est incontournable pour certains usages, et je l'utilise volontiers, mais quand on crée des exécutables destinés à être transportés il y a la contrainte de transporter en même temps KGF.dll et de le mettre à un endroit bien précis et connu de l'exécutable lui-même. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Clic droit Mer 7 Fév 2018 - 20:39 | |
| Salut JL35 ! On en avait déjà parlé ici. Bonne soirée ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Clic droit Mer 7 Fév 2018 - 21:25 | |
| Effectivement Minibug, tu avais une solution semblable et je n'ai pas assez cherché ! C'est un peu plus acrobatique qu'un ON_RIGHT_CLICK (qui n'existe pas) mais bon, on fait avec ce qu'on a. | |
| | | Contenu sponsorisé
| Sujet: Re: Clic droit | |
| |
| | | | Clic droit | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |