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 |
|
|
| ON_CLICK (clic droit) | |
| | |
Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: ON_CLICK (clic droit) Jeu 13 Nov 2014 - 14:55 | |
| J'ai déjà dû en parler plusieurs fois au fil des ans, ce n'est pas vital bien sûr, mais ça me gêne: le ON_CLICK ne réagit que sur le clic gauche, impossible de déclencher une action sur un clic droit (avec un timer ? non, merci), qui peut pourtant être bien pratique.
J'aurais bien aimé: Soit une commande spéciale On_Click_Right Soit, plus simple, une réaction indifférenciée du On_Click sur les clics gauche ET droit, à charge pour le programmeur, s'il le souhaite, de faire la différence, ce qui serait facile. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: ON_CLICK (clic droit) Jeu 13 Nov 2014 - 16:40 | |
| En attendant que Jack gère le clic droit séparément, tu peux le faire par KGF.dll. J'ai des fonctions qui peuvent discerner clic gauche et droit et réagir par rapport à cela. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: ON_CLICK (clic droit) Jeu 13 Nov 2014 - 17:03 | |
| Merci Klaus, je sais bien, mais il faut charger la dll, alors qu'il me semble que ce serait bien simple pour panoramic, sans instruction supplémentaire, de réagir indifféremment aux deux clics, et après dans la routine il est facile de différencier, si on le désire (MOUSE_LEFT_DOWN et MOUSE_RIGHT_DOWN). Il y a déjà eu une discussion là-dessus: https://panoramic.1fr1.net/t1851-supplique-pour-un-clic-droit?highlight=clic+droitEt puis, même avec la dll, est-ce qu'on peut programmer un événement comme le clic sur un objet, c'est à dire déclencher une routine au moment du clic (je ne parle pas de Timers, trop contraignants) ? Ça voudrait bien dire qu'il y a un élément en surveillance permanente capable de réagir immédiatement au clic droit (ou gauche), et ça c'est du domaine du traitement des interruptions par panoramic, à ma connaissance la dll ne fait pas ça. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: ON_CLICK (clic droit) Jeu 13 Nov 2014 - 17:14 | |
| Oui. Avec la DLL, tu n'as pas besoin d'un timer pour intercepter les clics droits ou gauches. Le principe est le suivant: tu déclares un EDIT (caché par HIDE) avec un évènement ON_CHANGE. Puis, tu utilises le handle de cet EDIT lors de la définition de l'interception du clic par la DLL. Et la DLL va charger une valeur particulière dans cet EDIT lorsqu'elle intercepte un clic gauche ou droit (ou double ou évènement roulette, selon ce que tu configures). Cette valeur permet d'identifier l'objet cliqué et le type de clic. Donc, tu utilises la routine ON_CHANGE de cet EDIT comme si c'était une routine ON_CLICK de l'objet Panoramic, et tu péux différencier clic gauche et droit par le contenu du EDIT. Regarde la doc - c'est assez bien expliqué. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: ON_CLICK (clic droit) Jeu 13 Nov 2014 - 17:27 | |
| Effectivement, j'étais en train de regarder ça, mais ça demande quelques tests avant de comprendre la mécanique ! L'exemple du ClickSetHook me troublait un peu: - Code:
-
dim res%, hnd%, hndpos% memo 10 : hnd% = handle(10) edit 10 : hndpos% = handle(10) : hide 10 ' intercepter les évènements sur le mémo et signaler les coordonnées res% = dll_call2("ClickSetHook",hnd%,hndpos%) avec les deux objets avec le même numéro... idem pour le ClickClearHook (les joies du copier coller). Je n'ai pas compris grand chose, mais je n'arrive pas à faire réagir sur le clic droit, rien du tout: - Code:
-
DIM hm%, he%, hl%, hp%, i%, j%, res%
DLL_ON "C:\PANORAMIC\KLAUS\DLLs\KGF.dll"
MEMO 10: color 10,255,0,0: on_click 10,clic ITEM_ADD 10,"MEMO" PICTURE 11: TOP 11,TOP(10)+HEIGHT(10): LEFT 11,50: COLOR 11,0,255,0 LIST 12: TOP 12,TOP(11)+HEIGHT(11): COLOR 12,255,255,0: ON_CLICK 12,clic ITEM_ADD 12,"LIST"
EDIT 1000: HIDE 1000: ON_CHANGE 1000,Chg he% = HANDLE(1000) hm% = HANDLE(10) hp% = HANDLE_CANVAS(11) hl% = HANDLE(12) res% = DLL_CALL2("ClickSetHook",hp%,hl%) END
clic: IF CLICKED(10)=1 MESSAGE "Clic gauche sur MEMO" ELSE MESSAGE "clic gauche sur LIST" END_IF RETURN
Chg: MESSAGE TEXT$(1000) RETURN SAUF: bizarrement le clic droit sur le Memo m'affiche un menu, mais ça doit être windows: ... Coller Lecture de droite à gauche Afficher les caractères de contrôle Unicode Insérer un caractère de contrôle Unicode Ouvrir l'Éditeur IME...
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: ON_CLICK (clic droit) Jeu 13 Nov 2014 - 17:58 | |
| Oups... problème de doc ! Je vais corriger cela. En attendant, voici comment la distinction entre click gauche et droit sur un MEMO doit se faire: - Code:
-
label clicgauche, clicdroit
dim res%, hnd%, hndpos%, hndclic%
dll_on "KGF.dll"
memo 1 : hnd% = handle(1) : ' on veut intercepter les clics sur ce mémo on_click 1,clicgauche edit 10 : hndpos% = handle(10) : hide 10 : ' cet EDIT recevra les informations button 11 : hndclic% = handle(11) : hide 11 : ' ce BUTTON sera "cliqué" par l'évènement détecté on_click 11,clicdroit ' intercepter les évènements sur le mémo et signaler les coordonnées res% = dll_call2("ClickSetHook",hnd%,hndpos%) ' intercepter le clic droit (typ%=3) res% = dll_call2("ClickSetLink",hndclic%,3)
end
clicgauche: message "clic gauche" return clicdroit: message "clic droit" return
Pas de timer. Ca marche comme n'importe quel ON_xxx de Panoramic. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: ON_CLICK (clic droit) Jeu 13 Nov 2014 - 18:08 | |
| D'accord, comme ça ça marche. Mais ce n'est quand même pas simple comme bonjour (enfin, comme On_Click...) Il faut répéter la procédure pour tout objet susceptible d'être cliqué.
Merci en tout cas Klaus pour les explications.
En tout cas ce n'est quand même pas très clair dans mon esprit: ce Button (fictif ?) qui réagit quand on clique droit dans le Memo... quel rapport entre les deux ? Il faut associer (ClickSetLink) un bouton fictif à chaque objet susceptible d'être cliqué ? Est-ce que ce système marche s'il y a plusieurs objets à prendre en considération (à surveiller), par exemple un deuxième Memo ? ---> OUI j'ai essayé, ça marche, mais il faut faire l'opération pour chaque objet à surveiller. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: ON_CLICK (clic droit) Jeu 13 Nov 2014 - 18:59 | |
| En effet. Et c'est encore plus restrictif: pour le moment, on ne peut faire une interception de clic droit sur un objet que pour un seul objet, pas sur plusieurs.
On peut obtenir le même effet avec la partie "rectangle" (deux autres fonctions de ce groupe). Mais c'est pareil: ça s'adresse à un seul objet, sur lequel on peut définir plusieurs zones "sensibles" pour lesquelles on surveille l'entrée et la sortie du curseur pour chaque zone.
Si tu veux gérer le cric droit sur plusieurs objets, je peux faire évoluer ces fonctions, sans difficulté majeure. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: ON_CLICK (clic droit) Jeu 13 Nov 2014 - 20:35 | |
| Mais non Klaus, il semble que ça marche très bien sur au moins deux objets, je modifie un peu ton exemple: - Code:
-
label clicgauche, clicdroit, clicdroit2
dim i%, res%, hm1%, hm2%, hndpos%, hnd1%, hnd2%
DLL_ON "C:\PANORAMIC\KLAUS\DLLs\KGF.dll"
memo 1 : color 1,255,0,0: hm1% = handle(1): ' on veut intercepter les clics sur ce mémo on_click 1,clicgauche memo 2: left 2,300: color 2,0,255,0: hm2% = handle(2) on_click 2,clicgauche edit 10 : hndpos% = handle(10) : hide 10: ' cet EDIT recevra les informations button 11 : hnd1% = handle(11) : hide 11: ' ce BUTTON sera "cliqué" par l'évènement détecté on_click 11,clicdroit button 12 : hnd2% = handle(12) : hide 12: ' ce BUTTON sera "cliqué" par l'évènement détecté on_click 12,clicdroit2
' intercepter les évènements sur le mémo 1 et signaler les coordonnées res% = dll_call2("ClickSetHook",hm1%,hndpos%) ' intercepter le clic droit (typ%=3) res% = dll_call2("ClickSetLink",hnd1%,3) ' intercepter les évènements sur le mémo 2 et signaler les coordonnées res% = dll_call2("ClickSetHook",hm2%,hndpos%) ' intercepter le clic droit (typ%=3) res% = dll_call2("ClickSetLink",hnd2%,3) end ' ======================== clicgauche: i% = number_click message "clic gauche sur memo "+str$(i%) return clicdroit: message "clic droit sur memo 1, xy= "+TEXT$(10) return clicdroit2: message "clic droit memo 2, xy= "+TEXT$(10) return | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: ON_CLICK (clic droit) Jeu 13 Nov 2014 - 20:45 | |
| Bien vu, JL35 ! De cette manière, ça marche en multi-élément. Bravo !
Je vais quand-même étudier l'extension du principe à un nombre non limité d'objets, avec un seul bouton caché à cliquer. Ca me semble plus réaliste pour des réalisations plus complexes. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: ON_CLICK (clic droit) Jeu 13 Nov 2014 - 20:58 | |
| Et moi je suis en train d'étudier une sub qui ferait tout ça automatiquement, à appeler pour chaque objet concerné... Quelque chose comme ça: - Code:
-
label clicgauche, clicdroit dim i%, res%, hm1%, hm2%, hndpos%, hnd1%, hnd2% DLL_ON "C:\PANORAMIC\KLAUS\DLLs\KGF.dll"
memo 1 : color 1,255,0,0: on_click 1,clicgauche button 11 : hide 11: on_click 11,clicdroit Clic_Droit(1,11): ' activation de la fonction surveillance clic droit memo 2: left 2,300: color 2,0,255,0: on_click 2,clicgauche button 12 : hnd2% = handle(12) : hide 12: on_click 12,clicdroit Clic_Droit(2,12): ' activation de la fonction surveillance clic droit end ' ======================== clicgauche: i% = number_click message "clic gauche sur memo "+str$(i%) return
clicdroit: i% = number_click IF i% = 11 message "clic droit sur memo 1, xy= "+TEXT$(nedi%) ELSE message "clic droit sur memo 2, xy= "+TEXT$(nedi%) END_IF return ' ========================= SUB Clic_Droit(obj%,but%) ' Interception du clic droit sur l'objet obj% ' Un BUTTON but% caché est associé à cet objet, ' avec ON_CLICK but%,[Routine de traitement du clic droit] DIM_LOCAL hobj%,hbut%,hedi%,res% IF VARIABLE("nedi%") = 0 DIM nedi% nedi%=2000: WHILE OBJECT_EXISTS(nedi%)=1: nedi%=nedi%+1: END_WHILE EDIT nedi%: HIDE nedi% END_IF ' intercepter les évènements sur l'objet obj% et signaler les coordonnées hobj% = HANDLE(obj%): hbut% = HANDLE(but%): hedi% = HANDLE(nedi%) res% = dll_call2("ClickSetHook",hobj%,hedi%) ' intercepter le clic droit (typ%=3) res% = dll_call2("ClickSetLink",hbut%,3) END_SUB J'aurais bien voulu me débarrasser du Button associé, mais pas possible, à cause du On_Click. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: ON_CLICK (clic droit) Jeu 13 Nov 2014 - 21:50 | |
| J'ai eu une idée de génie pour me passer des boutons fictifs: - Code:
-
LABEL clic DIM i% DLL_ON "C:\PANORAMIC\KLAUS\DLLs\KGF.dll"
MEMO 1 : color 1,255,0,0: on_click 1,clic Clic_Droit(1): ' activation de la fonction clic droit MEMO 2: left 2,300: color 2,0,255,0: on_click 2,clic Clic_Droit(2): ' activation de la fonction clic droit END ' ==================================================================== clic: i% = NUMBER_CLICK IF MOUSE_LEFT_DOWN(i%) = 1 MESSAGE "clic gauche sur memo "+STR$(i%) ELSE MESSAGE "clic droit sur memo "+STR$(i%)+" xy= "+TEXT$(nedi%) END_IF RETURN ' =================================================================== SUB Clic_Droit(obj%) ' Interception du clic droit sur l'objet obj% DIM_LOCAL hobj%,hedi%,res% IF VARIABLE("nedi%") = 0 DIM nedi% nedi%=2000: WHILE OBJECT_EXISTS(nedi%)=1: nedi%=nedi%+1: END_WHILE EDIT nedi%: HIDE nedi% END_IF hobj% = HANDLE(obj%): hedi% = HANDLE(nedi%) res% = dll_call2("ClickSetHook",hobj%,hedi%) ' intercepter le clic droit (typ%=3) res% = dll_call2("ClickSetLink",hobj%,3) END_SUB HÉLAS ! ça ne marche pas, et je ne comprends pas pourquoi. En effet, dans les deux cas clic gauche ou droit je vais bien dans la même routine, où, idée géniale, je teste MOUSE_LEFT_DOWN() pour voir quel est le bouton cliqué. Quel que soit le bouton, ça me répond toujours le bouton gauche, je n'y comprends rien... Comment différencier les deux cas ? J'ai une solution simple, je teste le texte renvoyé, s'il n'y a rien c'est un clic gauche, sinon ce sont les coordonnées du clic droit. Donc plus de bouton annexe, seulement l'objet concerné: - Code:
-
LABEL clic DIM i% DLL_ON "C:\PANORAMIC\KLAUS\DLLs\KGF.dll"
MEMO 1 : color 1,255,0,0: on_click 1,clic Clic_Droit(1): ' activation de la fonction clic droit MEMO 2: left 2,300: color 2,0,255,0: on_click 2,clic Clic_Droit(2): ' activation de la fonction clic droit END ' ==================================================================== clic: i% = NUMBER_CLICK IF TEXT$(nedi%) = "" MESSAGE "clic gauche sur memo "+STR$(i%) ELSE MESSAGE "clic droit sur memo "+STR$(i%)+" xy= "+TEXT$(nedi%) END_IF TEXT nedi%,"" RETURN ' =================================================================== SUB Clic_Droit(obj%) ' Interception du clic droit sur l'objet obj% DIM_LOCAL hobj%,hedi%,res% IF VARIABLE("nedi%") = 0 DIM nedi% nedi%=2000: WHILE OBJECT_EXISTS(nedi%)=1: nedi%=nedi%+1: END_WHILE EDIT nedi%: HIDE nedi% END_IF hobj% = HANDLE(obj%): hedi% = HANDLE(nedi%) res% = dll_call2("ClickSetHook",hobj%,hedi%) ' intercepter le clic droit (typ%=3) res% = dll_call2("ClickSetLink",hobj%,3) END_SUB Est-ce que ça te paraît correct Klaus ? | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: ON_CLICK (clic droit) Jeu 13 Nov 2014 - 22:39 | |
| Très puissant, JL35 ! Faudra que j'étudie ça de près. Et il faudra que je vois comment ça fonctionne avec d'autres types d'évènements de souris... Mais c'est bluffant ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: ON_CLICK (clic droit) Jeu 13 Nov 2014 - 22:59 | |
| N'exagère pas, c'est toi qui as fait tout le boulot ! Mais je ne suis pas mécontent de moi quand même, ça me permettra de patienter en attendant que Jack intègre le fonction dans le On_Click. Je sais qu'il a d'autres chats à fouetter en ce moment, avec l'intégration sous Android. Il paraît même qu'il est parfois pris par une activité professionnelle ? | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: ON_CLICK (clic droit) Ven 14 Nov 2014 - 14:58 | |
| J'ai repris ces fonctions et j'en ai modifié légèrement le fonctionnement. Cela se traduit par une amélioration de l'information retournée dans l'objet EDIT associé à l'interception. Aucune modification dans le format d'appel. La documentation a été actualisée. J'ai appliqué cela à ton exemple. Et j'y ai ajouté la reconnaissance du double clic. On peut donc maintenant reconnaître, sur chacun ds objets, le simple clic gauche, le simple clic droit et de double clic gauche: - Code:
-
DIM i%, j% DLL_ON "KGF.dll" label clic
MEMO 1 : color 1,255,0,0: ' on_click 1,clic Clic_Droit(1): ' activation de la fonction clic droit
MEMO 2: left 2,300: color 2,0,255,0: ' on_click 2,clic Clic_Droit(2): ' activation de la fonction clic droit END ' ==================================================================== clic: caption 0,text$(nedi%) i% = instr(text$(nedi%),"=")-1 j% = val(left$(text$(nedi%),i%)) if j%=handle(1) then i% = 1 if j%=handle(2) then i% = 2 IF instr(TEXT$(nedi%),"=01")>0 then MESSAGE "clic gauche sur memo "+STR$(i%)+" hnd=id:x,y= "+TEXT$(nedi%) IF instr(TEXT$(nedi%),"=02")>0 then MESSAGE "double clic gauche sur memo "+STR$(i%)+" hnd=id:x,y= "+TEXT$(nedi%) IF instr(TEXT$(nedi%),"=03")>0 then MESSAGE "clic droit sur memo "+STR$(i%)+" hnd=id:x,y= "+TEXT$(nedi%) off_change nedi% : TEXT nedi%,"" : on_change nedi%,clic RETURN ' =================================================================== SUB Clic_Droit(obj%) ' Interception du clic droit sur l'objet obj% DIM_LOCAL hobj%,hedi%,res% IF VARIABLE("nedi%") = 0 DIM nedi% nedi%=2000: WHILE OBJECT_EXISTS(nedi%)=1: nedi%=nedi%+1: END_WHILE EDIT nedi%: HIDE nedi% : on_change nedi%,clic END_IF hobj% = HANDLE(obj%): hedi% = HANDLE(nedi%) res% = dll_call2("ClickSetHook",hobj%,hedi%) ' intercepter le clic droit (typ%=3) res% = dll_call2("ClickSetLink",hobj%,1) res% = dll_call2("ClickSetLink",hobj%,2) res% = dll_call2("ClickSetLink",hobj%,3) END_SUB C'est pas beau, ça ? | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: ON_CLICK (clic droit) Ven 14 Nov 2014 - 17:25 | |
| Non, c'est pas beau, c'est magnifique ! Ça ouvre des horizons...
Je me mets tout ça sous le coude, à portée de main, merci Klaus, tu es le meilleur.
Une question: le système ne marche pas pour des clics sur certains objets, par exemple un picture, j'ai essayé de mettre le Handle_Canvas() au lieu de Handle() mais ça ne marche pas. C'est juste une question théorique, mais... | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: ON_CLICK (clic droit) Ven 14 Nov 2014 - 17:58 | |
| Moi je serait vous pour retrouver facilement cette fonctionnalité, j'enverrais un petit fichier texte avec l'explication et un fichier avec le source permettant de le faire à notre ami Ygeronimi pour qu'il le rajoute à la biblothèque de SUB (même s'il faut préciser que cela nécessite KGF.DLL. L'explication fournit dans ce post est largement suffisante pour comprendre l'utilisation. Je ne sais pas si Jack rajoutera cette fonctionalité nativement dans Panoramic, mais en attendant, l'ajout dans les SUB du mag permettrait de rerouver cette info beaucoup plus facilement que par le forum | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: ON_CLICK (clic droit) Ven 14 Nov 2014 - 18:23 | |
| Salut tout le monde. Je prends le train en marche pour dire (je veux dire pour écrire) à Klaus - Citation :
- Non, c'est pas beau, c'est magnifique !
Maintenant, comme je suis hors-jeu et à mille lieues du sujet, je vous propose ce code HTML - Spoiler:
- Code:
-
<html> <head> <script type="text/javascript"> function QuelBouton(event){ if (event.button==1){ alert("Bouton gauche de la souris cliqué!") }else{ alert("Bouton droit de la souris cliqué!") } } </script> </head>
<body onmousedown="QuelBouton(event)"> <p>!!! Cliquez !!!. </p> </body>
</html>
Enregistrez-le où vous voulez, sous le nom que vous voulez, mais avec l’extension .HTML Lancez-le par un double clique et … cliquez (droit ou gauche). | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: ON_CLICK (clic droit) Ven 14 Nov 2014 - 18:57 | |
| Chouette, ce petit code JavaScript Inline !
Pour JL35: Pour le picture qui n'a pas de handle, il faut procéder autrement. Il faut utiliser:
D'abord:
ClickSetHook pour définir une interception en spécifiant l'EDIT de réception.
ensuite:
ClickSetDefineRect pour définir des rectangles qui sont des zones "sensibles". Soit un seul rectangle pour tout le picture, soit plusieurs rectangles dans le même picture
puis
ClickSetLinkRect pour lier le rectangle au picture, en précisant le type d'interception.
ET voilà...
| |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: ON_CLICK (clic droit) Ven 14 Nov 2014 - 20:13 | |
| Merci pour ces précisions Klaus, c'est noté ! | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 15 Nov 2014 - 11:04 | |
| @ Jicehel, Tu peux regarder mon pseudo objet button_picture. Je ne reprend que le clic gauche mais il suffit d' étendre les interceptions. - Code:
-
Sub O_Button_Picture(num_obj%,No_b%,P%,V1%,V2%,T%,L%,H%,W%,Pict$,Pict2$) O_Picture(num_obj%+1,P%,V2%,T%,L%,H%,W%,Pict2$):cursor_point num_obj% +1 O_Picture(num_obj%,P%,V1%,T%,L%,H%,W%,Pict$):On_click num_obj%,Clic:cursor_point num_obj% obj% = obj%+1 if variable("No2%")=0 : dim No2% :No2%=7000 :End_if if Variable("R%")=0 :dim R% :R%=1:else :R%=R%+1 :end_if if Object_exists(7000)=0 :O_Edit(7000,P%,0,-190,-200,0,0):End_If If Variable("KGF_res%")=0 then dim KGF_res% KGF_res% = dll_call2("ClickSetHook",handle(P%),handle(No2%)) KGF_res% = dll_call5("ClickDefineRect",R%,L%,T%,W%,H%)
No2%=No_b% O_Button(No2%,P%,0,-200,-200,0,0,"",1) KGF_res% = dll_call3("ClickSetLinkRect",handle(No2%),0-5,R%)
No2%=No_b%+1 O_Button(No2%,P%,0,-200,-200,0,0,"",1) KGF_res% = dll_call3("ClickSetLinkRect",handle(No2%),0-6,R%) End_Sub
Sub O_Edit(No%,P%,V%,T%,L%,H%,W%,T$,Ch%) EDIT No% if P% > 0 then Parent No%,P% If V% = 0 Then hide No% If H% > 0 Then Height No%,H% If W% > 0 Then Width No%,W% If T% > 0 Then Top No%,T% If L% > 0 Then Left No%,L% If T$<>"" Then Text No%,T$ If Ch%=1 Then On_Change No%,Change End_Sub
Sub O_Picture(No%,P%,V%,T%,L%,H%,W%,P$) PICTURE No% if P% > 0 then Parent No%,P% If V% = 0 Then hide No% If H% > 0 Then Height No%,H% If W% > 0 Then Width No%,W% If T% > 0 Then Top No%,T% If L% > 0 Then Left No%,L% if P$<>"" then File_load No%,P$ End_Sub Petite précision, en sortant du programme, il ne faut pas oublier de quitter la surveillance des zones rectangles sinon...BOUMmm!!! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: ON_CLICK (clic droit) Sam 15 Nov 2014 - 11:31 | |
| oui, mais je pense que des gens peuvent rechercher comme JL35 la fonctionnalité pour le clic droit. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: ON_CLICK (clic droit) Sam 15 Nov 2014 - 11:38 | |
| Certainement, Jicehel. Et en Delphi, l'interception du clic droit est aussi facile que celle du clic gauche. C'est parfaitement symétrique. C'est le double-clic gauche qui pose problème, pour des raisons que j'ai déjà exposé en détail au moment où j'ai publié ces fonctions d'interceptions pour la première fois. Actuellement, je suis arrivé à quelque chose d'assez facilement exploitable. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 15 Nov 2014 - 12:36 | |
| Petit code : - Code:
-
dim no%,mem% dim kgf$
label change
kgf$="P:\Dlls\KGF.dll" dll_on kgf$
no%=no%+1 : mem%=no% memo mem% intercept_clic() end
Sub intercept_clic() dim_local z%,x%,O%,ic_res%,hnd%,hndpos% if variable("ICE%")=0 dim ICE% no%=no%+1 : ICE%=no% Edit no% : hide no% : on_change no%,change end_if if variable("ice_tab$")=0 then dim ice_tab$(no%) for z%=1 to no% if object_type(z%)<>9 O%=z% hnd%=handle(O%) ice_tab$(O%)=str$(hnd%) hndpos%=handle(ICE%) ic_res% = dll_call2("ClickSetHook",hnd%,hndpos%) for x%=1 to 3 if x%<>4 ic_res% = dll_call2("ClickSetLink",hnd%,x%) end_if next x% end_if next z% end_sub
Change: if number_change=ICE% : if len(text$(ice%))>10 :Attrib_clic():end_if:end_if return
Sub Attrib_clic() dim_local x%,sep%,t$,t2$ sep%=instr(text$(ice%),"=") t$=right$(text$(ice%),sep%+1) for x%=1 to no% if left$(text$(ice%),sep%-1)=ice_tab$(x%) t2$="Objet N : "+str$(x%) if left$(t$,2)="01": t2$=t2$+" clic gauche" : end_if if left$(t$,2)="02": t2$=t2$+" double clic" : end_if if left$(t$,2)="03": t2$=t2$+" clic droit" : end_if exit_for end_if next x% caption 0,t2$ End_sub Je n' ai exclus que le type Picture mais d' autres n' ont pas de handle il me semble... ...il suffit de les exclure aussi | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: ON_CLICK (clic droit) Sam 15 Nov 2014 - 13:39 | |
| Ton interception marche bien ! Je suis content de voir que cela inspire d'autres Panoramiciens... | |
| | | Contenu sponsorisé
| Sujet: Re: ON_CLICK (clic droit) | |
| |
| | | | ON_CLICK (clic droit) | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |