papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Gestion du Simple clic et du Double clic Jeu 1 Mai 2014 - 22:33 | |
| Salut tout le monde. Je crois avoir trouvé une astuce pour gérer le simple clic et le double clic. Si on veut gérer à la fois le clic et le double-clic sur un objet on se retrouve coincé : quand on double-clique, la procédure Simple_Click est appelée en premier et empêche Double_Click de se déclencher. Les fonctions API (plus quelques petites astuces de programmation!) permettent de résoudre ce problème La fonction GetTickCount permet de connaître le nombre de millisecondes écoulées depuis le démarrage du système. La fonction GetDoubleClickTime permet de connaître le laps de temps définissant un double-clic (nombre de millisecondes maximal entre le 1er et le 2ème clic). L'astuce est la suivante : S'il se produit un clic sur l'objet, la procédure Simple_Click est déclenchée. Cette procédure "attend" qu'un 2ème clic se déclenche éventuellement (boucle WHILE... END_WHILE). Cette attente continue jusqu'à ce que l'intervalle de temps maximal du 2ème clic (DoubleClickTime%) soit écoulé. Dans cet intervalle, la boucle WHILE... END_WHILE appelle "en rafale" la fonction GetTickCount. Si dans l'intervalle un deuxième clic se produit, le système d'exploitation va alors provoquer l'appel de la procédure Double_Click. Celle-ci va gérer le double-clic, mettre la valeur 1 dans la variable DblClick et rendre le contrôle au système. A la fin de la boucle, on peut donc savoir s'il y a eu double-clic (DblClicj = 1) ou non (DblClick = 0) et agir en conséquence. - cliquez sans crainte:
- Code:
-
rem ============================================================================ rem Gestion du Simple click et du double click rem Par Papydall rem ============================================================================ ' Si on veut gérer à la fois le clic et le double-clic sur un objet on se retrouve ' coincé : quand on double-clique, la procédure Simple_Click est appelée en premier ' et empêche Double_Click de se déclencher. ' Les fonctions API (plus quelques petites astuces de programmation!) ' permettent de résoudre ce problème
' La fonction API GetTickCount permet de connaître le nombre de millisecondes ' écoulées depuis le démarrage du système.
' La fonction GetDoubleClickTime permet de connaître le laps de temps définissant ' un double-clic (nombre de millisecondes maximal entre le 1er et le 2ème clic).
' L'astuce est la suivante :
' * S'il se produit un clic sur l'objet, la procédure Simple_Click est déclenchée ' * Cette procédure "attend" qu'un 2ème clic se déclenche éventuellement ' (boucle WHILE... END_WHILE). Cette attente continue jusqu'à ce que l'intervalle de ' temps maximal du 2ème clic (DoubleClickTime%) soit écoulé. ' * Dans cet intervalle, la boucle WHILE... END_WHILE appelle "en rafale" la ' fonction GetTickCount. ' * Si dans l'intervalle un deuxième clic se produit, le système d'exploitation ' va alors provoquer l'appel de la procédure Double_Click. ' Celle-ci va gérer le double-clic, mettre la valeur 1 dans la variable ' DblClick et rendre le contrôle au système. ' * A la fin de la boucle, on peut donc savoir s'il y a eu double-clic ' (DblClicj = 1) ou non (DblClick = 0) et agir en conséquence.
' Sans fonctions API, PANORAMIC rendrait difficile ce genre d'opération car il ne permet ' pas, entre autres, de connaître des informations du système comme l'intervalle du double-clic. rem ============================================================================
label Simple_Click, Double_Click dim t%,tickCount% ,DoubleClickTime%,DblClick print " Cliquer ou double-cliquer pour voir !!!"
on_click 0, simple_click on_double_click 0, double_click
dll_on "User32.dll" ' Déterminer le laps de temps définissant un double-clic (nombre de millisecondes ' maximal entre le 1er et le 2ème clic). DoubleClickTime% = dll_call0("GetDoubleClickTime") dll_off dll_on "kernel32.dll" end rem ============================================================================ Simple_Click: ' Déterminer le nombre de millisecondes écoulées depuis le démarrage du système. tickCount% = dll_call0("GetTickCount") t% = tickcount% : tickCount% = dll_call0("GetTickCount")
while (tickCount% - t%) < DoubleClickTime% tickCount% = dll_call0("GetTickCount") end_while if DblClick = 0 : print "Simple clic " : else : DblClick = 0 : end_if return rem ============================================================================ Double_Click:
DblClick = 1 print "Double clic" return rem ============================================================================
| |
|
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Gestion du Simple clic et du Double clic Ven 2 Mai 2014 - 0:19 | |
| Une approche très interessante | |
|