Page 1 sur 1
[R] Tester la durée du clic sur un bouton
Posté : lun. 06 juin 2011 16:40
par pierrotm777
Bonjour à tous,
Existe t-il une solution qui permettraiit de tester si l'on appuie longuement sur un bouton.
Le but étant d'avoir deux actions pour un même bouton, une suit à un click, une autre suite à un bouton cliqué et tenu !
Merci par avance de votre aide
Re: [..] Tester si l'on click longuement sur un bouton
Posté : lun. 06 juin 2011 18:05
par Tlem
En faisant simple, je dirait que
_IsPressed suffit largement.
Faites la détection de l'appui sur la touche donnée et exécutez 'un compteur' qui s'incrémentera ou alors utilisez
TimerInit puis une boucle, etc ...
Bref vous avez le choix.
Après en plus poussé, vous avez l'utilisation d'une
CallBack telle que
GUIRegisterMsg, mais c'est déjà un chouilla plus complexe.

Re: [..] Tester si l'on click longuement sur un bouton
Posté : mar. 07 juin 2011 15:31
par legend
un bouton n'est pas forcément une touche clavier.
c'est pourquoi je vais poser cette question

c'est quoi l’équivalent de _IsPressed si il s'agit d'un bouton de gui.
merci et bonne journée
Re: [..] Tester si l'on click longuement sur un bouton
Posté : mar. 07 juin 2011 21:08
par Tlem
_IsPressed fonctionne pour le clavier, mais pour la souris aussi ...
Comme pour cliquer sur un bouton, on utilise le clic de souris, il suffit de capturer le temps pendant lequel le clic est appuyé.
Ceci dit, en utilisant
GUIGetMsg(1) (mode avancé), il est possible de capturer les événements :
- $GUI_EVENT_PRIMARYDOWN
$GUI_EVENT_PRIMARYUP
$GUI_EVENT_SECONDARYDOWN
$GUI_EVENT_SECONDARYUP
Ce qui laisse pas mal de possibilités dans les tests.

Re: [..] Tester si l'on click longuement sur un bouton
Posté : mer. 08 juin 2011 08:41
par SurPriseS
La fonction que j'utilise, c'est moche, mais sa marche...
Code : Tout sélectionner
func _next()
while 1
$p = 0
For $i = 1 to 15
If _IsPressed ("01", $dll) Then
sleep(10)
$p = $p + 1
EndIf
Next
if $p = 15 Then
$current = _BASS_ChannelGetPosition ($MusicHandle, $BASS_POS_BYTE)
$current = $current + 500000
_BASS_ChannelSetPosition ($MusicHandle, $current , $BASS_POS_BYTE + $BASS_MUSIC_POSRESET)
$m = 1
Else
if $m = 0 Then
_BASS_ChannelStop ($MusicHandle)
send("{DOWN}")
_play(1)
_play_pause(2)
ExitLoop
Else
ExitLoop
EndIf
EndIf
WEnd
$m = 0
EndFunc
Re: [..] Tester si l'on click longuement sur un bouton
Posté : mer. 08 juin 2011 10:59
par timmalos
N'oubliez pas de passer en résolu si tout est bien dans le meilleur des mondes.
Re: [..] Tester si l'on click longuement sur un bouton
Posté : mer. 08 juin 2011 11:26
par pierrotm777
Ce n'est pas encore résolu car je suis en train de me creuser les méninges dessus

Re: [..] Tester si l'on click longuement sur un bouton
Posté : mer. 08 juin 2011 22:21
par Tlem
Voici un modèle basé sur ce que j'ai dit :
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
$Form1 = GUICreate("Form1", 255, 122, 192, 124)
$Button1 = GUICtrlCreateButton("Cliquez moi un certain temps", 50, 45, 150, 25)
GUISetState(@SW_SHOW)
Global $TimeDown = 0
While 1
$nMsg = GUIGetMsg(1) ; Utilisation du mode avancé
Switch $nMsg[0]
Case $GUI_EVENT_CLOSE
Exit
Case $GUI_EVENT_PRIMARYDOWN
If $TimeDown = 0 Then $TimeDown = TimerInit() ; On initialise $TimeDown si ce n'est pas déja fait
Case $GUI_EVENT_PRIMARYUP
Local $DureeDuClic = Round(TimerDiff($TimeDown)/1000, 2) ; on calcul la durée sur deux décimales
MsgBox(64, "Durée du clic", "Vous avez cliqué le bouton" & @CRLF & _
"pendant " & $DureeDuClic & " secondes")
$TimeDown = 0 ; On réinitialise la variable
Case $Button1
EndSwitch
WEnd
Ceci dit, si vous devez en plus connaitre l'ID du bouton, cela ce complique. Il faudra rajouter l'appel à une CallBack.

Re: [..] Tester si l'on click longuement sur un bouton
Posté : jeu. 09 juin 2011 15:56
par pierrotm777
C'est parfait Tlem je vais adapter cela à mon besoin.
Merci

Re: [R] Tester la durée du clic sur un bouton
Posté : ven. 10 juin 2011 20:16
par pierrotm777
Aprés essai, mon besoin est légèrement différent de ce que vous me proposez !
Je souhaiterais en fait que le test se fasse sur la durée d'un bouton tenu et non sur une durée puis la levée du bouton !
J'ai donc tenté cela, mais sans succés!
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
$Form1 = GUICreate("Form1", 255, 122, 192, 124)
$Button1 = GUICtrlCreateButton("Cliquez moi un certain temps", 50, 45, 150, 25)
GUISetState(@SW_SHOW)
Global $TimeDown = 0
While 1
$nMsg = GUIGetMsg(1) ; Utilisation du mode avancé
Switch $nMsg[0]
Case $GUI_EVENT_CLOSE
Exit
Case $GUI_EVENT_PRIMARYDOWN
If $TimeDown = 0 Then $TimeDown = TimerInit() ; On initialise $TimeDown si ce n'est pas déja fait
Local $DureeDuClic = Round(TimerDiff($TimeDown)/1000, 2) ; on calcul la durée sur deux décimales
If $DureeDuClic >=2 and $nMsg[0] = $GUI_EVENT_PRIMARYDOWN Then;si bouton toujours tenu après 2 secondes
MsgBox(64,"Info","Click tenu depuis plus de 2 secondes")
EndIf
$TimeDown = 0 ; On réinitialise la variable
Case $Button1
EndSwitch
WEnd
Avec une action A si le bouton est appuyé puis relaché de suite et une action B si le bouton est maintenu appuyé plus de 2 secondes .
Re: [R] Tester la durée du clic sur un bouton
Posté : ven. 10 juin 2011 22:05
par pierrotm777
Bon , j'ai travaillé un peu le sujet afin de l'adapter à mon type de Gui PNG et voici le résultat:
Cliquez dans les rectangles rouges pour tester un click court ou long.
Je prend comme hypothèse qu'un click long est supérieur à 1 seconde