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 |
|
|
| Nouvelle DLL: intercepter clic gauche, double et droit ! | |
| | |
Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Nouvelle DLL: intercepter clic gauche, double et droit ! Ven 20 Jan 2012 - 16:32 | |
| J'ai fait une petite DLL permettant d'intercepter le clic gauche, le double-clic gauche et le clic droit, sur un onjet Panoramic !
C'est ClickIntercept.dll dans DLLs Divers sur mon site. La doc a été mise à jour pour cela. Voici un programme de démo. Il contient un picture sur lequel on peut essayer ces évènements. Par défaut, l'interception est désactivée - ces clics n'auront donc pas d'effet. Le bouton "Activer" permet l'installation de l'interception des évènements souris, le bouton "Desactiver" apparaît alors pour revenir en arrière. On peut maintenant utiliser les différents clics dans le picture, on verra alors les cases à cocher correspondantes de remlir, et un message texte signale le type d'évènement reçu. Après chaque essai, il faut utiliser le bouton "Purger" pour effacer les cases à cocher. Les boutons en haut à gauche permettent de simuler ces clics, par programmation. Une note technique: La difficulté de l'interception d'un double-clic tient à la façon dont Windows gère les évènements souris. Un double-clic est en réalite une succession de deux simples clics. Lors de la réception du premier simple clic, Windows signale simplement un évènement "clic gauche". Lorsque le second simple clic arrive, Windows signale ceci de la même manière. Il est de la responsabilité du programme application de gérer cela, si le délai entre les deux clics est "très court". Et, à moins d'être extra-lucide, Windows ne peut pas savoir qu'un autre clic gauche arrivera brièvement après le premier ! J'ai donc choisi de procéder ainsi: Pour chaque clic gauche, je signale un clic gauche. Pour chaque clic droit, je signale un clic droit. Si un clic gauche arrive moins de 500 milli-secondes après aun autre clic gauche, je signale EN PLUS un double-clic. Dans le programme application, à la réception d'un clic gauche, je lance un timer de 500 milli-secondes. Et tout se passe dans la routine évènement de ce timer. Si dans cette routine, on constate qu'un double-clic a été signalé, j'écarte le simple clic et ne traite que le double clic. Et voilà, le tout est joué. Maintenant, je sais: certains choix sont discutables. Pourquoi 500 ms ? On pourra dans des versions futures certainement améliorer, raccourcir ce délai voir le rendre paramétrable. On pourra aussi ajouter d'autres évènements (je pense à la molette...). Mais surtout, il faudra ajouter un moyen de retourner les coordonnées du clic - et c'est l'étape suivante. Donc, après tout ce baratin, voici le programme de démo: - Code:
-
label fermer, xxx01, xxx02, xxx03 label clic1, clic2, clic3, clic100 label activer, desactiver, purger label timer99, simple, double, droit
dim hnd1%, hnd2%, res%
button 1 : top 1,150 : left 1,10 : caption 1,"Fermer" on_click 1,fermer
button 10 : top 10,10 : left 10,10 : caption 10,"XXX01" on_click 10,xxx01 : hide 10 button 11 : top 11,10 : left 11,100 : caption 11,"XXX02" on_click 11,xxx02 : hide 11 button 12 : top 12,10 : left 12,190 : caption 12,"XXX03" on_click 12,xxx03 : hide 12
button 30 : top 30,40 : left 30,10 : caption 30,"clic simple" on_click 30,clic1 button 31 : top 31,40 : left 31,100 : caption 31,"clic double" on_click 31,clic2 button 32 : top 32,40 : left 32,190 : caption 32,"clic droit" on_click 32,clic3
memo 100 : top 100,10 : left 100,300 ' le ON_CLICK est désactivé INTENTIONNELLEMENT ! ' on_click 100,clic100 button 101 : top 101,110 : left 101,300 : caption 101,"Activer" on_click 101,activer button 102 : top 102,110 : left 102,400 : caption 102,"Désactiver" on_click 102,desactiver : inactive 102
check 201 : top 201,200 : left 201,300 : caption 201,"Clic simple" check 202 : top 202,230 : left 202,300 : caption 202,"Clic double" check 203 : top 203,260 : left 203,300 : caption 203,"Clic droit" button 209 : top 209,290 : left 209,300 : caption 209,"Purger" on_click 209,purger
timer 99 : timer_off 99 : timer_interval 99,500 on_timer 99,timer99
dll_on "ClickIntercept.dll"
res% = dll_call2("ClickSetLink",0,0) hnd1% = dll_call2("ClickSetLink",handle(10),1) hnd2% = dll_call2("ClickSetLink",handle(11),2) hnd2% = dll_call2("ClickSetLink",handle(12),3) ' message str$(hnd1%)+" "+str$(hnd2%) end
simple: message "click simple dans mémo" return
double: message "click double dans mémo" return
droit: message "click droit dans mémo" return
purger: mark_off 201 mark_off 202 mark_off 203 return
activer: inactive 101 res% = dll_call1("ClickSetHook",handle(100)) active 102 return
desactiver: inactive 102 res% = dll_call1("ClickClearHook",handle(100)) active 101 return
fermer: res% = dll_call1("ClickClearHook",handle(100)) dll_off terminate
xxx01: mark_on 201 timer_on 99 return
xxx02: mark_on 202 return
xxx03: mark_on 203 timer_on 99 return
timer99: timer_off 99 if checked(202)=1 then mark_off 201 ' ici, on dispatche selon l'évènement à traiter if checked(201)=1 then gosub simple if checked(202)=1 then gosub double if checked(203)=1 then gosub droit return
clic1: res% = dll_call1("ClickIt",1) return
clic2: res% = dll_call1("ClickIt",1) res% = dll_call1("ClickIt",2) return
clic3: res% = dll_call1("ClickIt",3) return
clic100: message "Clic simple sur le mémo" mark_on 201 return
| |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Nouvelle DLL: intercepter clic gauche, double et droit ! Ven 20 Jan 2012 - 18:05 | |
| Intéressant ! mais chez moi je n'arrive pas à détecter le clic droit (gauche et double ça marche). Ca marche si je clique gauche sur le bouton 'clic droit' Ou alors quelque chose m'a échappé ?
Snif, le clic droit c'est le seul qui m'intéresse... (je précise que je n'ai pas étudié le code, juste essayé).Rectificatif: je n'avais pas 'Activé' ! et là ça semble marcher... je continue | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouvelle DLL: intercepter clic gauche, double et droit ! Ven 20 Jan 2012 - 18:17 | |
| Ah ! Je me disais aussi... Voici ce que ça donne chez moi, avec le clic droit: [img] [/img] Demain, certainement, la mise à disposition des coordonnées de ces clics ! C'est en cours... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Nouvelle DLL: intercepter clic gauche, double et droit ! Ven 20 Jan 2012 - 18:37 | |
| Oui Klaus, ça marche, excuse-moi de t'avoir inquiété, même fugitivement... J'ai même simplifié ton test pour ne garder que la détection du clic droit, a priori je n'ai pas l'usage du double-clic, et le clic gauche j'ai ce qu'il faut avec Panoramic.
Même avec les coordonnées, il me restera quand même le problème du clic droit dans un LIST: savoir quel élément a été cliqué, s'il y a eu défilement par exemple. Mais ça je pense que seul Jack pourrait y répondre. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouvelle DLL: intercepter clic gauche, double et droit ! Ven 20 Jan 2012 - 18:54 | |
| Cela fait partie des éléments que je rechercherai. Il y a sûrement un moyen, puisqu'il s'agit de composants Windows standard que je peux toucher à travers leur handle. Je peux déjà déclencher l'évènement on_click sur un bouton, et on_change dans un edit. Je peux aussi changer la caption d'un bouton, d'un alpha et d'une form, et changer les données d'un edit. C'est déjà pas mal. Je pense que je pourrai identifier la ligne cliquée dans un mémo ou dans une liste. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouvelle DLL: intercepter clic gauche, double et droit ! Ven 20 Jan 2012 - 19:26 | |
| C'est allé plus vite que prévu: voici une version qui permet de retourner les coordonnées du clic en pixels. Pour cela, la routine ClickSetHook prend un second paramètre qui est le handle d'un objet Panoramic qui recevra les coordonnées. Si ce paramètre est passé avec la valeur zéro, rien ne sera retourné. C'est testé avec un edit, mais cela peut également être un alpha, sans problème. Les coordonnées sont retournées sous forme d'une chaine de caractères représentant les valeurs numériques de x suivie de y, séparées par une virgule. Exemple: 43,177. Voici le programme de démo adapté à cette version: - Code:
-
label fermer, xxx01, xxx02, xxx03 label clic1, clic2, clic3, clic100 label activer, desactiver, purger label timer99, simple, double, droit
dim hnd1%, hnd2%, res%
button 1 : top 1,150 : left 1,10 : caption 1,"Fermer" on_click 1,fermer
button 10 : top 10,10 : left 10,10 : caption 10,"XXX01" on_click 10,xxx01 : hide 10 button 11 : top 11,10 : left 11,100 : caption 11,"XXX02" on_click 11,xxx02 : hide 11 button 12 : top 12,10 : left 12,190 : caption 12,"XXX03" on_click 12,xxx03 : hide 12
button 30 : top 30,40 : left 30,10 : caption 30,"clic simple" on_click 30,clic1 button 31 : top 31,40 : left 31,100 : caption 31,"clic double" on_click 31,clic2 button 32 : top 32,40 : left 32,190 : caption 32,"clic droit" on_click 32,clic3
memo 100 : top 100,10 : left 100,300 ' le ON_CLICK est désactivé INTENTIONNELLEMENT ! ' on_click 100,clic100 button 101 : top 101,110 : left 101,300 : caption 101,"Activer" on_click 101,activer button 102 : top 102,110 : left 102,400 : caption 102,"Désactiver" on_click 102,desactiver : inactive 102
check 201 : top 201,200 : left 201,300 : caption 201,"Clic simple" check 202 : top 202,230 : left 202,300 : caption 202,"Clic double" check 203 : top 203,260 : left 203,300 : caption 203,"Clic droit" button 209 : top 209,290 : left 209,300 : caption 209,"Purger" on_click 209,purger edit 250 : top 250,350 : left 250,300
timer 99 : timer_off 99 : timer_interval 99,500 on_timer 99,timer99
dll_on "ClickIntercept.dll"
res% = dll_call2("ClickSetLink",0,0) hnd1% = dll_call2("ClickSetLink",handle(10),1) hnd2% = dll_call2("ClickSetLink",handle(11),2) hnd2% = dll_call2("ClickSetLink",handle(12),3) ' message str$(hnd1%)+" "+str$(hnd2%) end
simple: message "click simple dans mémo" return
double: message "click double dans mémo" return
droit: message "click droit dans mémo" return
purger: mark_off 201 mark_off 202 mark_off 203 text 250,"" return
activer: inactive 101 res% = dll_call2("ClickSetHook",handle(100),handle(250)) active 102 return
desactiver: inactive 102 res% = dll_call1("ClickClearHook",handle(100)) active 101 return
fermer: res% = dll_call1("ClickClearHook",handle(100)) dll_off terminate
xxx01: mark_on 201 timer_on 99 return
xxx02: mark_on 202 return
xxx03: mark_on 203 timer_on 99 return
timer99: timer_off 99 if checked(202)=1 then mark_off 201 ' ici, on dispatche selon l'évènement à traiter if checked(201)=1 then gosub simple if checked(202)=1 then gosub double if checked(203)=1 then gosub droit return
clic1: res% = dll_call1("ClickIt",1) return
clic2: res% = dll_call1("ClickIt",1) res% = dll_call1("ClickIt",2) return
clic3: res% = dll_call1("ClickIt",3) return
clic100: message "Clic simple sur le mémo" mark_on 201 return
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Nouvelle DLL: intercepter clic gauche, double et droit ! Ven 20 Jan 2012 - 20:02 | |
| Génial, plus rien ne t'arrête Klaus ^^ Il va falloir se creuser la tête bientôt pour te donner des défits interessants... Encore une fonctionnalité très utile | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Nouvelle DLL: intercepter clic gauche, double et droit ! Ven 20 Jan 2012 - 20:07 | |
| Bonsoir Klaus, Je ne sais pas encore me servir des dll car pour moi cela me paraît encore abstrait, mais je vais attendre patiemment que tu aies fini de la programmer, parce que le double clic gauche manque à Panoramic. Cela est une fonction très interessante et qui dans un logiciel quelconque permet plus de fluidité et moins de manipulation. C'est plus de rapidité et d'ergonomie! Merci beaucoup! @ + | |
| | | exdragon
Nombre de messages : 601 Date d'inscription : 05/01/2012
| Sujet: Re: Nouvelle DLL: intercepter clic gauche, double et droit ! Sam 21 Jan 2012 - 6:28 | |
| - Citation :
- Il va falloir se creuser la tête bientôt pour te donner des défits interessants...
Justement j'avais pensé faire un topic "Défis" proposant un sujet à réaliser, puis je me suis dis que le gagnant sera toujours le même^^ | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Nouvelle DLL: intercepter clic gauche, double et droit ! Sam 21 Jan 2012 - 10:24 | |
| Bonjour à tous ! Ca marche super bien Klaus ! Encore une dll bien utile !!! PS: La description de Divers.DLL n'est pas à jour sur ton site. Je suppose que lorsque tu auras finaliser la DLL, tu mettras le prog de demo également dans le zip?... | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Nouvelle DLL: intercepter clic gauche, double et droit ! Sam 21 Jan 2012 - 11:25 | |
| Il développe tellement vite de super DLL qu'il n'arrive plus à faire les docs ... Heu, si je peux proposer une idée pour les prochaine DLL et si ça intéresse Klaus, il y a un truc qui doit être faisable et dont je rêve depuis plus d'un an... Une DLL pour utiliser le SAPI (la synthèse vocale ...). Enfin bon, je fais ma demande, après c'est Klaus qui voit si ça l’intéresse et comment ça s'intègre dans sa todo liste au cas ou ... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouvelle DLL: intercepter clic gauche, double et droit ! Sam 21 Jan 2012 - 13:31 | |
| Une nouvelle version est mise en ligne.
Nouveautés: - la doc est mise à jour - le programme de démo est maintenant dans la distribution DLLs Divers - gestion du MEMO et du LIST - il y a une commande pour gérer la taille de la polie dans l'objet ciblé - à paramétrer selon les besoins - on n'a plus besoin de désactiver ON_CLICK sur l'objet ciblé. - on clic quelconque dans l'objet ciblé place le curseur à l'endroit du clic
Le programme de démo permet, via deux options, de choisir le type d'objet sur lequel on veut travailler: MEMO ou LIST. La gestion des accessibilités des boutons a été améliorée et sécurisée. Dans le cas d'une LIST, on peut obtenir la ligne ciblée par l'action de la souris.
La commande FONT_SIZE se trouve en ligne 78, au début du sous-programme INIT_OBJ.
| |
| | | exdragon
Nombre de messages : 601 Date d'inscription : 05/01/2012
| Sujet: Re: Nouvelle DLL: intercepter clic gauche, double et droit ! Sam 21 Jan 2012 - 22:17 | |
| - Citation :
- la taille de la polie
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouvelle DLL: intercepter clic gauche, double et droit ! Sam 21 Jan 2012 - 22:39 | |
| | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouvelle DLL: intercepter clic gauche, double et droit ! Dim 22 Jan 2012 - 13:31 | |
| @Jicehel; tu as mentionné SAPI - c'est fait ! Regarde le nouveau fil de discussion à ce sujet. Maintenant, Panoramic sait parler : | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Nouvelle DLL: intercepter clic gauche, double et droit ! Dim 22 Jan 2012 - 16:23 | |
| Merci, Klaus, j'ai répondu dans le premier post où je l'ai lu.. Je test tout de suite et je mets la réponse dans le bon post pour ton faire un retour des test En tout cas, impressionnant en rapidité !! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouvelle DLL: intercepter clic gauche, double et droit ! Lun 23 Jan 2012 - 13:04 | |
| Nouvelle version de ClickIntercept.dll:
Maiintenant, on peut intercepter les évènements "Mouse in" (code 5) et "Mouse out" (code 6) !
Ceci permet de gérer le survol de l'objet concerné !
D'ailleurs, le programme de démo met cela en évidence en changeant la couleur de fond du mémo ou de la list pendant que le curseur se trouve DANS l'objet ! C'est juste un exemple de ce qu'on peut faire.
EDIT
Ca marche aussi avec un objet EDIT et BUTTON! Le programme de démo inclut maintenant MEMO, LIST, EDIT et BUTTON.
En fait, ça marche avec tous les objets pour lesquels on peut utiliser la fonction handle(). On les trouve dans Aide/Manuel de référence/handle. Mais pour voir cela dans le programme de démo, il faut l'adapter en conséquence, bien sûr. Ceci dit, en s'inspirant de la logique d'utilisation des fonctions dans le programme de démo et avec la doc, il est aisé de construire un petit programme pour un type d'objet spécifique.
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouvelle DLL: intercepter clic gauche, double et droit ! Mer 25 Jan 2012 - 18:20 | |
| Voici un progrfamme Panoramic utilisant ClickIntercept.dll telle qu'elle est (il n'y a donc pas de mise à jour de la DLL pour cela). Ce programme permet de choisir un objet Panoramic parmi une liste de 16 (!) objets possibles. L'interception des clics y compris la détection "entrée souris" et "sortie souris" sera alors activée, et on peut observer le résultat dans un mémo servant de "trace", ainsi que par l'aspect de l'objet qui change sur entrée et sortie de la souris. Certains objets posent encore problème, et ceci est signalé dans le source ainsi que dans la "trace". C'est certainement provisoire. Mais dès à présent, on peut utiliser cette DLL sur une douzaine d'objets Panoramic différents, avec des résultats intéressants. On peut même gérer le clic droit sur une ligne d'un LIST, et le différencier du clic gauche, ainsi que le double-clic ! Vous verrez, c'est spectaculaire de vois changer un mémo ou un bouton (!) changer d'aspect si le curseur passe par-dessus, sans même avoir à le cliquer ! Voici le source: - Code:
-
' demo clickintercept objets.bas
' ce programme montre l'usage de ClickIntercept.dll ' pour tous les objets possibles.
' les objets possibles sont ceux pour lesquels on peut ' avoir un handle par la fonction handle(): ' scene3d, button, edit, memo, combo, alpha, form ' list, check, option, main_menu, sub_menu, ' movie, track_bar, scroll_bar, progress_bar, scene2d ' malgré la possibilité d'avoir un handle pour SOUND, MAIN_MENU ' OPEN_DIALOG et SAVE_DIALOG, ces objets ne sont pas utlisables ' ici car ils sont invisibles.
' Les zones spécifiques à la gestion de la DLL sont commentées. ' On peut ainsi extraire les parties obligatoires, ainsi que les ' instructions spécifiques à la gestion de certains types d'objet.
' ATTENTION: l'objet COMBO pose problème - il n'est pas utilisable ' en l'état !.
' ATTENTION: à cause d'un bug pour HANDLE() pour un ALPHA, la gestion ' de cet objet ne peut pas encore être faite !
' ATTENTION: SUB_MENU pose encore un problème qui est à l'étude !
label montrer, communs1, communs2, clickobj, cacher, close0 label gauche, double, droit, molette, mousein, mouseout, timer99 label memolistcombo, communs1bis, clickobjbis, communs3
data "scene3d",1, "button",1, "edit",1, "memo",1, "combo",1 data "alpha",0, "form",0 data "list",1, "check",1, "option",1, "sub_menu",0 data "movie",1, "track_bar",1 data "scroll_bar",1, "progress_bar",1, "scene2d",1 data "*fini*" dim maxobj% : maxobj% = 0
dim obj%, i%, s$, res%, f_simple%, f_dedans% dim hndtab%(20)
height 0,650
' charger et afficher la liste des objets disponibles alpha 101 : top 101,20 : left 101,10 : caption 101,"Objet:" combo 102 : top 102,40 : left 102,10 repeat read s$ if s$<>"*fini*" maxobj% = maxobj% + 1 read hndtab%(maxobj%) item_add 102,s$ end_if until s$="*fini*"
' créer les boutons "Montrer" et "Cacher" mutuellement exclusifs button 103 : top 103,70 : left 103,10 : caption 103,"Montrer" on_click 103,montrer button 104 : top 104,70 : left 104,10 : caption 104,"Cacher" on_click 104,cacher : hide 104
' ceci sont les boutons d'interface avec la DLL ClickIntercept.dll. ' leur évènement ON_CLICK signale l'évènement détecté par la DLL. button 201 : hide 201 : on_click 201,gauche button 202 : hide 202 : on_click 202,double button 203 : hide 203 : on_click 203,droit button 204 : hide 204 : on_click 204,molette button 205 : hide 205 : on_click 205,mousein button 206 : hide 206 : on_click 206,mouseout
' cet EDIT sert à recevoir les coordonnées de la souris au moment du clic alpha 301 : top 301,130 : left 301,10 : caption 301,"Coordonnées:" edit 302 : top 302,130 : left 302,100 ' ce MEMO sert à montrer les évènements détectés par la DLL alpha 303 : top 303,160 : left 303,10 : caption 303,"Trace:" memo 304 : top 304,160 : left 304,100 : height 304,400
' ce timer est indispensable pour différencier les simples clics ' des doubles clics. L'intervalle peut éventuellement être raccourci. timer 99 : timer_off 99 : timer_interval 99,500 on_timer 99,timer99
' on crée tous les objets possibles, et on les cache. Les routines ' COMMUNSx serventà configurer des attributs communs à plusieurs objets. obj% = 0 scene3d 1 : hide 1 : gosub communs1 button 2 : hide 2 : gosub communs1 edit 3 : hide 3 : gosub communs1 memo 4 : hide 4 : gosub communs1 combo 5 : hide 5 : gosub communs1 alpha 6 : hide 6 : gosub communs2 form 7 : hide 7 : obj% = obj% + 1 list 8 : hide 8 : gosub communs1 check 9 : hide 9 : gosub communs1 option 10 : hide 10 : gosub communs1 option 1010 : hide 1010 : gosub communs1bis sub_menu 11 : hide 11 : gosub communs3 movie 12 : hide 12 : gosub communs2 track_bar 13 : hide 13 : gosub communs2 scroll_bar 14 : hide 14 : gosub communs2 progress_bar 15 : hide 15 : gosub communs2 scene2d 16 : hide 16 : gosub communs1
' on charage la DLL dll_on "ClickIntercept.dll" ' la routine CLOSE0 servira à désactiver les interceptions de clics ' afin de ne pas perturber le système, e, sortant on_close 0,close0
' ici, on établit le lien entre les évènements (par leur ID) ' et les boutons dont la routine ON_CLICK leur sera associée. res% = dll_call2("ClickSetLink",0,0) : ' tout effacer res% = dll_call2("ClickSetLink",handle(201),1) : ' clic gauche res% = dll_call2("ClickSetLink",handle(202),2) : ' double-clic res% = dll_call2("ClickSetLink",handle(203),3) : ' clic droit ' res% = dll_call2("ClickSetLink",handle(204),3) : ' pas encore implémenté res% = dll_call2("ClickSetLink",handle(205),5) : ' souris entrante res% = dll_call2("ClickSetLink",handle(206),6) : ' souris sortante
end
' ******************* fin du programme principal *************
' ------------------- appelé en fermeture du programme ------- close0: if obj%>0 : ' est-ce qu'on a un traitement activé pour un objet ? ' si cet objet a une interception des clics, alors les désactiver if hndtab%(obj%)=1 then res% = dll_call1("ClickClearHook",handle(obj%)) end_if dll_off : ' décharger la DLL return
' ------------------- évènement timer spécial pour les double-clics --- timer99: timer_off 99 : ' couper le timer if f_simple%=1 : ' est-ce qu'on a déjà reçu un clic gauche ? f_simple% = 0 : ' oui donc on a un clic simple ! ' ***** ici, on place le traitement spécifique au simple-clic item_add 304,"DLL: clic gauche" if instr("combo,list",s$)>0 then item_add 304,"--> indexe "+str$(item_index(obj%)) ' ***** fin du traitement spécifique au double-clic ' ===== ici, on trouve des traitements à effectuer selon le type d'obbjet if instr("scene3d",s$)=0 then set_focus obj% if s$="check" if checked(obj%)=1 mark_off obj% else mark_on obj% end_if end_if ' ===== fin des traitements selon le type d'objet end_if return
' ------------------- évènement clic gauche détecté par la DLL ----- gauche: timer_off 99 : ' on coupe le timer f_simple% = f_simple% + 1 : ' on incrémente le compteur de clics gauches if f_simple%=2 : ' est-ce qu'on a déjà 2 clics ? f_simple% = 0 : ' oui, donc c'est un double-clic ! ' ***** ici, on place le traitement spécifique au double-clic item_add 304,"DLL: clic double" if instr("combo,list",s$)>0 then item_add 304,"--> indexe "+str$(item_index(obj%)) ' ***** fin du traitement spécifique au double-clic ' ===== ici, on trouve des traitements à effectuer selon le type d'obbjet if instr("scene3d",s$)=0 then set_focus obj% ' ===== fin des traitements selon le type d'objets return end_if ' item_add 304,"attente" timer_on 99 return
' ------------------- évènement double clic détecté par PANORAMIC ----- double: timer_off 99 : ' on coupe le timer f_simple% = 0 : ' on remet le compteur de clics à zéro ' ***** ici, on place le traitement spécifique au double-clic item_add 304,"PANORAMIC: clic double" if instr("combo,list",s$)>0 then item_add 304,"--> indexe "+str$(item_index(obj%)) ' ***** fin du traitement spécifique au double-clic ' ===== ici, on trouve des traitements à effectuer selon le type d'obbjet if instr("scene3d",s$)=0 then set_focus obj% ' ===== fin des traitements selon les objets return
' ------------------- évènement clic droit détecté par la DLL ----- droit: ' ***** ici, on place le traitement spécifique au double-clic item_add 304,"DLL: clic droit" if instr("combo,list",s$)>0 then item_add 304,"--> indexe "+str$(item_index(obj%)) ' ***** fin du traitement spécifique au clic droit ' ===== ici, on trouve des traitements à effectuer selon le type d'obbjet if instr("scene3d",s$)=0 then set_focus obj% ' ===== fin des traitements selon les objets return
' ------------------- évènement molette détecté par la DLL ----- molette: ' ***** ici, on place le traitement spécifique au double-clic item_add 304,"DLL: molette" ' ***** fin du traitement spécifique à la molette ' ===== ici, on trouve des traitements à effectuer selon le type d'obbjet if instr("scene3d",s$)=0 then set_focus obj% ' ===== fin des traitements selon les objets return
' ------------------- évènement souris entrante détecté par la DLL ----- mousein: if f_dedans%=1 then return : ' la souris est déjà dedans ? ignorer ! f_dedans% = 1 : ' mémoriser que la souris est dedans ' ***** ici, on place le traitement spécifique à l'entrée de la souris item_add 304,"DLL: souris entrée" if s$="alpha" font_color obj%,255,0,0 end_if if instr("button,scene2d,movie,track_bar,scroll_bar,progress_bar",s$)>0 height obj%,height(obj%)+2 width obj%,width(obj%)+2 if instr("movie,track_bar,scroll_bar,progress_bar",s$)=0 then font_bold obj% end_if ' ***** fin du traitement spécifique à l'entrée de la souris ' ===== ici, on trouve des traitements à effectuer selon le type d'obbjet if instr("memo,edit,list,scene3d,combo,check",s$)>0 color obj%,220,220,255 if instr("scene3d",s$)=0 then set_focus obj% end_if ' ===== fin des traitements selon le type d'objet return
' ------------------- évènement souris sortante détecté par la DLL ----- mouseout: if f_dedans%=0 then return : ' souris déjà dehors ? ignorer f_dedans% = 0 : ' mémoriser que la souris est dehors ' ***** ici, on place le traitement spécifique à la sortie de la souris item_add 304,"DLE: souris sortie" if s$="alpha" font_color obj%,0,0,0 end_if if instr("button,scene2d,movie,track_bar,scroll_bar,progress_bar",s$)>0 height obj%,height(obj%)-2 width obj%,width(obj%)-2 if instr("movie,track_bar,scroll_bar,progress_bar",s$)=0 then font_bold_off obj% end_if ' ***** fin du traitement spécifique à la sortie de la souris ' ===== ici, on trouve des traitements à effectuer selon le type d'obbjet if instr("memo,edit,list,scene3d,combo,check",s$)>0 color obj%,210,210,255 if instr("scene3d",s$)=0 then set_focus obj% end_if ' ===== fin des traitements selon le type d'objet return
' ------------------- routines de configuration des objets test --- communs1: obj% = obj% + 1 top obj%,10 left obj%,300 on_click obj%,clickobj return communs1bis: top obj%+1000,70 left obj%+1000,300 on_click obj%+1000,clickobjbis return
communs2: obj% = obj% + 1 top obj%,10 left obj%,300 return
communs3: obj% = obj% + 1 main_menu obj%+1000 parent obj%,obj%+1000 caption 11,"Sous-menu " on_click obj%,clickobj return
' ------------------- évènement PANORAMIC ON_CLICK des objets teste --- clickobj: item_add 304,"PANORAMIC: Click objet" return
' ------------------- évènement PANORAMIC ON_CLICK sur second OPTION --- clickobjbis: item_add 304,"PANORAMIC: Click objet" return
' -------------------désactiver objet test et cacher tout -------- cacher: hide obj% : ' cacher l'objet if s$="option" then hide obj%+1000 : ' cacher aussi la seconde option ' si l'objet peut intercepter les clics, alors déactiver l'interception if hndtab%(obj%)=1 then res% = dll_call1("ClickClearHook",handle(obj%)) ' restaurer l'écran pour pouvoir lancer un nouveau test hide 104 : show 103 obj% = 0 : f_simple% = 0 active 102 return
' -------------------charger,les objets MEM, LIST et COMBO avec quelques lignes memolistcombo: clear obj% for i%=1 to 8 item_add obj%,s$+" ligne "+str$(i%) next i% return
' -------------------montrer l'objet à tester et intercepter les clics montrer: inactive 102 s$ = trim$(item_index$(102)) : ' récupérer le nom de l'objet if s$="" then return : ' rien choisi ? obj% = item_index(102) : ' récuper le ID de l'objet choisi clear 304 : ' effacer le mémo pour la trace item_add 304,"Objet "+s$ : ' signaler le nom de l'objet f_dedans% = 0 : ' supposer "souris est dehors' ' traitements spécifiques pour tester un objet ----------------- select obj%
'---------- scene3d case 1 color obj%,210,210,255 : show obj% res% = dll_call2("ClickSetHook",handle(obj%),handle(302)) hide 103 : show 104 '---------- button case 2 caption obj%,"Bouton" : show obj% res% = dll_call2("ClickSetHook",handle(obj%),handle(302)) hide 103 : show 104 '---------- edit case 3 color obj%,210,210,255 : show obj% res% = dll_call2("ClickSetHook",handle(obj%),handle(302)) hide 103 : show 104 '---------- memo case 4 color obj%,210,210,255 : show obj% gosub memolistcombo res% = dll_call2("ClickSetHook",handle(obj%),handle(302)) hide 103 : show 104 '---------- combo case 5 item_add 304,"+++ ne marche pas !" color obj%,210,210,255 : show obj% gosub memolistcombo res% = dll_call2("ClickSetHook",handle(obj%),handle(302)) hide 103 : show 104 '---------- alpha case 6 caption obj%,"Alpha" : font_color obj%,0,0,0 : show obj% ' res% = dll_call2("ClickSetHook",handle(obj%),handle(302)) on_click obj%,clickobj : ' car BUG sur handle() pour ALPHA ! hide 103 : show 104 '---------- form case 7 message 'Pas encore implémenté !" hide 103 : show 104 '---------- list case 8 color obj%,210,210,255 : show obj% gosub memolistcombo res% = dll_call2("ClickSetHook",handle(obj%),handle(302)) hide 103 : show 104 '---------- check case 9 color obj%,210,210,255 : show obj% res% = dll_call2("ClickSetHook",handle(obj%),handle(302)) hide 103 : show 104 '---------- option case 10 ' pour OPTION, une seconde option est automatiquement créée et ' affichée, avec le numéro obj%+1000, mais seule l'objet obj% ' est utilisé pour intercepter les clics par la DLL. color obj%,210,210,255 : show obj% : show obj%+1000 res% = dll_call2("ClickSetHook",handle(obj%),handle(302)) hide 103 : show 104 '---------- sub_menu case 11 item_add 304,"+++ ne marche pas !" caption obj%,"Sous-menu pas de curseur" : show obj% res% = dll_call2("ClickSetHook",handle(obj%),handle(302)) hide 103 : show 104 '---------- movie case 12 color obj%,210,210,255 : show obj% res% = dll_call2("ClickSetHook",handle(obj%),handle(302)) hide 103 : show 104 '---------- track_bar case 13 show obj% res% = dll_call2("ClickSetHook",handle(obj%),handle(302)) hide 103 : show 104 '---------- scroll_bar case 14 position obj%,30 : show obj% res% = dll_call2("ClickSetHook",handle(obj%),handle(302)) hide 103 : show 104 '---------- progress_bar case 15 position obj%,30 : show obj% res% = dll_call2("ClickSetHook",handle(obj%),handle(302)) hide 103 : show 104 '---------- scene2d case 16 show obj% res% = dll_call2("ClickSetHook",handle(obj%),handle(302)) hide 103 : show 104 end_select return
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Nouvelle DLL: intercepter clic gauche, double et droit ! Mer 25 Jan 2012 - 21:48 | |
| Klaus, penses-tu que tu pourrais faire une version concaténée de tes DLL pour n'en charger qu'une avec toutes les fonctions courantes que tu as ajouté ?
IPC.dll; Strings.dll ; Print.dll; IsRunning.dll ; SetWindowButtons.dll ; WebBrowser.dll ; WScript.dll; Histo.dll; ShowModal.dll ; SowModalBMP.dll; ClickIntercept.dll et Sapi.dll
Il est peu probable que les programmes utilisent toutes les fonctions de la DLL, mais c'est plus simple que de gérer toutes les combinaisons ou de jongler avec DynamicallyLoadDLL
Qu'en penses tu ?
PS: au fait, tu as oublié les dernières DLL en haut de ton doc word à l'endroit où tu listes les DLL | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Nouvelle DLL: intercepter clic gauche, double et droit ! Mer 25 Jan 2012 - 23:38 | |
| C'est bien le problème avec les dll, il finit par y en avoir un peu partout et ça devient difficile à gérer. Evidemment, une bibliothèque dans laquelle on piocherait serait mieux sans doute, mais ça risque de faire un gros module et d'alourdir le code. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouvelle DLL: intercepter clic gauche, double et droit ! Jeu 26 Jan 2012 - 1:07 | |
| @Jicehel: Tu as raison: il faut que je modifie le haut de la doc pour cela.
@Jicehel et JL35: A l'origine, c'est pour cela que j'avais créé KGF.dll. En fait, certaines de ces DLL sont extraites de KGF.dll, suite à une demande du forum pour avoir des DLLs plus petites. Mais c'est vrai que ça garde un intérêt d'avoir tout en semble, dans un même module. Je vais donc refaire une fusion de mes DLL dernière version pour les intégrer toutes dans KGF.dll. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Nouvelle DLL: intercepter clic gauche, double et droit ! Jeu 26 Jan 2012 - 13:34 | |
| Merci Klaus. En effet, tu ne peux pas t'amuser à tout intégrer à chaque modif (à moins de disposer d'un système pour allonger le temps ...) mais c'est vrai que c'est pratique de faire cette fusion de temps à autre vu le fonctionnement de Panoramic | |
| | | exdragon
Nombre de messages : 601 Date d'inscription : 05/01/2012
| Sujet: Re: Nouvelle DLL: intercepter clic gauche, double et droit ! Jeu 26 Jan 2012 - 14:16 | |
| - Citation :
- En effet, tu ne peux pas t'amuser à tout intégrer à chaque modif (à moins de disposer d'un système pour allonger le temps ...)
Par contre pourquoi pas un dossier "modules", dans lequel on y téléchargerais les nouvelles DLL et le programme utiliserait celle qu'il a besoin sans tout charger. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouvelle DLL: intercepter clic gauche, double et droit ! Jeu 26 Jan 2012 - 15:13 | |
| @Exdragon: où est-ce que tu le vois, de dossier "modules" ? Sur mon site, je ne peux donner que des liens vers des fichiers individuels, d'où l'utilisation des ficjhier ZIP. Sur 4shared où j'ai un compte, je pourrais aisément le mettre en place, et chacun pourrait y piocher par FTP. L'ennui, si certains fichiers ne son pas téléchargés pendant un certain temps (3 mois, par exemple), ils sont simplement effacés. Le répertoire ne sera donc par vraiment complèt, à moins d'y recharger en permanence l'ensemble des fichiers. Ce n'est pas si évident que cela, ce que tu proposes, mais si tu as une solution, je suis prêt à l'entendre. | |
| | | Invité Invité
| Sujet: Re: Nouvelle DLL: intercepter clic gauche, double et droit ! Jeu 26 Jan 2012 - 15:27 | |
| Klaus, Pourquoi tu ne vas pas sur Host: si tu interviens pour rajouter ou modifier un fichier dans les 6 mois, rien n'ai retiré. Mes premiers envois que j'ai mis il y a peut-être 2 ans, ils sont encore là, même sans y toucher. Et j'ai un compte gratuit!
|
| | | Contenu sponsorisé
| Sujet: Re: Nouvelle DLL: intercepter clic gauche, double et droit ! | |
| |
| | | | Nouvelle DLL: intercepter clic gauche, double et droit ! | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |