Aide et conseils concernant AutoIt et ses outils.
	
			
		
		
			
				
																			
								littlechiki 							 
						Niveau 3 			
		Messages :  48 Enregistré le :  sam. 13 avr. 2019 13:58
	Status : 
			Hors ligne 
	 
		 
		
						
					
													
							
						
	#1 
			
									
						Message 
					 
								par littlechiki  ven. 13 sept. 2019 12:57 
			
			
			
			
			Bonjour,
Je nécessiterai un peu de votre aide concernant les accelerators. voilà déjà mon code et je vous expose mon problème après :
#include <WindowsConstants.au3> #include <GUIConstantsEx.au3> $gui  =  GUICreate ( "Ma GUI" , 500 , 500 ) $button  =  GUICtrlCreateButton ( "Affichage" , 100 , 100 , 130 , 40 ) $label  =  GUICtrlCreateLabel ( "i = 0" , 100 , 150 , 130 , 20 ) $i  =  0 GUISetState ( @SW_SHOW , $gui ) Local $aAccelKey [ 1 ] [ 2 ]  =  [ [ "{ENTER} " , $button ] ] GUISetAccelerators
( $aAccelKey ) While 1    Switch GUIGetMsg ( )       Case $GUI_EVENT_CLOSE          Exit Case $button          $i  +=  1          GUICtrlSetData ( $label , "i = "  &  $i )    EndSwitch WEnd 
Mon problème est que les accelerators répètent l'action tant que la touche est enfoncée. si j'appuie sur le bouton avec la souris, i n'augmente que de 1 mais si j'appuie sur entrer, l'action se répète à toute vitesse. Y aurait-il un moyen de faire que l'action ne s'effectue qu'une seule fois tant que ma touche est appuyée ? Je ne peut pas utiliser de HotkeySet parce que mes touches seront utilisé sur d'autres fenêtres aussi. Merci pour vos réponses !
 
		 
				
		
		 
	 
				
		
		
			
				
								Tlem 							 
						Site Admin 			
		Messages :  11798 Enregistré le :  ven. 20 juil. 2007 21:00Localisation :  Bordeaux
	Status : 
			Hors ligne 
	 
		 
		
						
					
													
							
						
	#2 
			
									
						Message 
					 
								par Tlem  ven. 13 sept. 2019 18:06 
			
			
			
			
			Bonjour.
			
			
									
									
						 
		 
				
		
		 
	 
				
		
		
			
				
								walkson 							 
						Modérateur 			
		Messages :  1037 Enregistré le :  ven. 12 août 2011 19:49Localisation :  Hurepoix
	Status : 
			Hors ligne 
	 
		 
		
						
					
													
							
						
	#3 
			
									
						Message 
					 
								par walkson  ven. 13 sept. 2019 19:36 
			
			
			
			
			Bonjour,
C'est pas terrible mais ce peut être une piste...........
#include <WindowsConstants.au3> #include <GUIConstantsEx.au3> #include <Misc.au3> $gui  =  GUICreate ( "Ma GUI" , 500 , 500 ) $button  =  GUICtrlCreateButton ( "Affichage" , 100 , 100 , 130 , 40 ) Global $label  =  GUICtrlCreateLabel ( "i = 0" , 100 , 150 , 130 , 20 ) Global $i  =  0 ,  $rep GUISetState ( @SW_SHOW , $gui ) Local $aAccelKey [ 1 ] [ 2 ]  =  [ [ "{ENTER} " , $button ] ] GUISetAccelerators
( $aAccelKey ) While 1         Switch GUIGetMsg ( )                 Case $GUI_EVENT_CLOSE                         Exit Case $button          Do $rep  =  _IsPressed ( "0D" )           Until $rep  =  False $i  +=  1          GUICtrlSetData ( $label , "i = "  &  $i )         EndSwitch WEnd Cordialement,"Horas non numero nisi serenas " Le canon de midi 
						 
		 
				
		
		 
	 
				
		
		
			
				
																			
								littlechiki 							 
						Niveau 3 			
		Messages :  48 Enregistré le :  sam. 13 avr. 2019 13:58
	Status : 
			Hors ligne 
	 
		 
		
						
					
													
							
						
	#4 
			
									
						Message 
					 
								par littlechiki  sam. 14 sept. 2019 12:04 
			
			
			
			
			Bon de mon côté, j'ai trouvé ça. bon ça marche pas vraiment mais ça c'est parce que j'ai vraiment du mal avec les timers...
#include <WindowsConstants.au3> #include <GUIConstantsEx.au3> #include <Misc.au3> $gui  =  GUICreate ( "Ma GUI" , 500 , 500 ) $button  =  GUICtrlCreateButton ( "Affichage" , 100 , 100 , 130 , 40 ) $check  =  GUICtrlCreateCheckbox ( "" , 1000 , 1000 ) Global $label  =  GUICtrlCreateLabel ( "i = 0" , 100 , 150 , 130 , 20 ) Global $i  =  0 GUISetState ( @SW_SHOW , $gui ) Local $aAccelKey [ 1 ] [ 2 ]  =  [ [ "{ENTER} " , $button ] ] GUISetAccelerators
( $aAccelKey ) While 1    Switch GUIGetMsg ( )       Case $GUI_EVENT_CLOSE          Exit Case $button          Local $timer  =  0          $timer  =  TimerInit If Not  _IsChecked
( $check )  Then $i  +=  1             GUICtrlSetData ( $label , "i = "  &  $i )          EndIf GUICtrlSetState ( $check , $GUI_CHECKED )          If TimerDiff ( $timer )  =  1000  Then GUICtrlSetState ( $check , $GUI_UNCHECKED )    EndSwitch WEnd Func  _IsChecked
( $control )    Return BitAND ( GUICtrlRead ( $control ) ,  $GUI_CHECKED )  =  $GUI_CHECKED EndFunc 
Vous auriez des idées pour faire qu'il marche ? Mon idée serait de remettre le timer à 0 à chaque fois que le bouton est appuyé, comme ça, tant que le bouton n'est pas relâché au moins une seconde, ça ne fait rien.
 
		 
				
		
		 
	 
				
		
		
			
				
								walkson 							 
						Modérateur 			
		Messages :  1037 Enregistré le :  ven. 12 août 2011 19:49Localisation :  Hurepoix
	Status : 
			Hors ligne 
	 
		 
		
						
					
													
							
						
	#5 
			
									
						Message 
					 
								par walkson  sam. 14 sept. 2019 15:09 
			
			
			
			
			Bonjour,
J'ai essayé plusieurs choses comme des boucles mais le bourrin continue à incrémenter $i par derrière donc la seule chose que j'ai trouvé, c'est de bloqué GUISetAccelerators() un moment et de le remettre comme ceci (J'ai mis la touche F2 car ENTER peut être trompeur)
#include <WindowsConstants.au3> #include <GUIConstantsEx.au3> $gui  =  GUICreate ( "Ma GUI" , 500 , 500 ) $button  =  GUICtrlCreateButton ( "Affichage" , 100 , 100 , 130 , 40 ) Global $label  =  GUICtrlCreateLabel ( "i = 0" , 100 , 150 , 130 , 20 ) Global $i  =  0 GUISetState ( @SW_SHOW , $gui ) Local $aAccelKey [ 1 ] [ 2 ]  =  [ [ "{F2} " , $button ] ] GUISetAccelerators
( $aAccelKey ) While 1         $nmsg  =  GUIGetMsg ( )       Switch $nmsg          Case $GUI_EVENT_CLOSE             Exit Case $button             $i  +=  1             GUICtrlSetData ( $label , $i )             $aAccelKey [ 0 ] [ 1 ]  =  0             GUISetAccelerators
( $aAccelKey )             Sleep ( 1000 )             $aAccelKey [ 0 ] [ 1 ]  =  $button             GUISetAccelerators
( $aAccelKey )         EndSwitch WEnd 
$i continue à être incrémenté mais beaucoup plus lentement
Cordialement,"Horas non numero nisi serenas " Le canon de midi 
						 
		 
				
		
		 
	 
				
		
		
			
				
																			
								littlechiki 							 
						Niveau 3 			
		Messages :  48 Enregistré le :  sam. 13 avr. 2019 13:58
	Status : 
			Hors ligne 
	 
		 
		
						
					
													
							
						
	#6 
			
									
						Message 
					 
								par littlechiki  sam. 14 sept. 2019 15:28 
			
			
			
			
			En effet c'est déjà beaucoup mieux Et du coup avec un timer pour dire If $timer <=1000 Then $aAccelKey[0][1] = 0, ce serait pas possible ? (J'essaye juste de rendre mon programme le plus rapide possible donc l'utilisation de sleep ralentis le tout quoi) Mais c'est une très bonne idée ! Merci déjà !
			
			
									
									
						 
		 
				
		
		 
	 
				
		
		
			
				
								walkson 							 
						Modérateur 			
		Messages :  1037 Enregistré le :  ven. 12 août 2011 19:49Localisation :  Hurepoix
	Status : 
			Hors ligne 
	 
		 
		
						
					
													
							
						
	#7 
			
									
						Message 
					 
								par walkson  sam. 14 sept. 2019 16:10 
			
			
			
			
			Comme ceci ?
(ne pas oubliez F2  
 )
#include <WindowsConstants.au3> #include <GUIConstantsEx.au3> $gui  =  GUICreate ( "Ma GUI" , 500 , 500 ) $button  =  GUICtrlCreateButton ( "Affichage" , 100 , 100 , 130 , 40 ) Global $label  =  GUICtrlCreateLabel ( "i = 0" , 100 , 150 , 130 , 20 ) Global $i  =  0 ,  $ret GUISetState ( @SW_SHOW , $gui ) Local $aAccelKey [ 1 ] [ 2 ]  =  [ [ "{F2} " , $button ] ] GUISetAccelerators
( $aAccelKey ) $tt  =  TimerInit ( ) While 1         $nmsg  =  GUIGetMsg ( )       Switch $nmsg          Case $GUI_EVENT_CLOSE             Exit Case $button             $i  +=  1             GUICtrlSetData ( $label , $i )             $aAccelKey [ 0 ] [ 1 ]  =  0             GUISetAccelerators
( $aAccelKey )             $ret  =  0       EndSwitch If TimerDiff ( $tt )  >  1500  And $ret  =  0  Then $aAccelKey [ 0 ] [ 1 ]  =  $button                GUISetAccelerators
( $aAccelKey )                $tt  =  TimerInit ( )                $ret  =  1  ;empèche de lancer GUISetAccelerators() inutilement             EndIf WEnd Cordialement,"Horas non numero nisi serenas " Le canon de midi 
						 
		 
				
		
		 
	 
				
		
		
			
				
																			
								littlechiki 							 
						Niveau 3 			
		Messages :  48 Enregistré le :  sam. 13 avr. 2019 13:58
	Status : 
			Hors ligne 
	 
		 
		
						
					
													
							
						
	#8 
			
									
						Message 
					 
								par littlechiki  dim. 15 sept. 2019 12:49 
			
			
			
			
			Ça a presque atteint la perfection là ! merci, Je vais me servir de ça !
			
			
									
									
						 
		 
				
		
		 
	 
				
		
		
			
				
								walkson 							 
						Modérateur 			
		Messages :  1037 Enregistré le :  ven. 12 août 2011 19:49Localisation :  Hurepoix
	Status : 
			Hors ligne 
	 
		 
		
						
					
													
							
						
	#9 
			
									
						Message 
					 
								par walkson  dim. 15 sept. 2019 14:58 
			
			
			
			
			Bonjour,
Je pense que le problème est mal posé et de rattacher une touche à un bouton (dans ce cas) est une mauvaise idée.
Je vous propose d'utiliser HotKeySet() pour la touche et le bouton indépendamment comme ceci
#include <Misc.au3> $Gui  =  GUICreate ( "" ,  400 ,  50 ) Local $input  =  GUICtrlCreateInput ( 0 ,  10 ,  20 ,  50 , 25 ) $button  =  GUICtrlCreateButton ( "clic" ,  100 ,  20 ,  50 , 25 ) GUISetState ( ) Global $a  =  0 ,  $b  =  1 HotKeySet ( "{F2} " , "clic" ) While 1    $msg  =  GUIGetMsg ( )    Select Case $msg  =  - 3            Exit case $msg  =  $button             $a  =  GUICtrlRead ( $input )          $a  +=  $b          GUICtrlSetData ( $input , $a )    EndSelect WEnd Func  clic
( )    $a  =  GUICtrlRead ( $input )    $a  +=  $b    GUICtrlSetData ( $input , $a )    $b  =  0    Do If _IsPressed ( "71" )  =  False Then $b  =  1  ;F2 relaché quitte la boucle    Until $b  =  1 EndFunc 
$i s'incrémente de 1 à chaque appel du bouton ou de F2
Cordialement,"Horas non numero nisi serenas " Le canon de midi 
						 
		 
				
		
		 
	 
				
		
		
			
				
								walkson 							 
						Modérateur 			
		Messages :  1037 Enregistré le :  ven. 12 août 2011 19:49Localisation :  Hurepoix
	Status : 
			Hors ligne 
	 
		 
		
						
					
													
							
						
	#10 
			
									
						Message 
					 
								par walkson  dim. 15 sept. 2019 15:48 
			
			
			
			
			Remarquez, on peut le faire comme ceci
#include <WindowsConstants.au3> #include <GUIConstantsEx.au3> #include <Misc.au3> $gui  =  GUICreate ( "Ma GUI" , 500 , 250 ) $button  =  GUICtrlCreateButton ( "Affichage" , 100 , 100 , 130 , 40 ) Global $label  =  GUICtrlCreateLabel ( "i = 0" , 100 , 150 , 130 , 20 ) Global $i  =  0 ,  $rep  =  1 GUISetState ( @SW_SHOW , $gui ) Local $aAccelKey [ 1 ] [ 2 ]  =  [ [ "{F2} " , $button ] ] GUISetAccelerators
( $aAccelKey ) While 1         Switch GUIGetMsg ( )          Case $GUI_EVENT_CLOSE             Exit Case $button             $i  +=  $rep             GUICtrlSetData ( $label , "i = "  &  $i )             $rep  =  0             $aAccelKey [ 0 ] [ 1 ]  =  0             GUISetAccelerators
( $aAccelKey )             Do If _IsPressed ( "71" )  =  False Then $rep  =  1             Until $rep  =  1             $aAccelKey [ 0 ] [ 1 ]  =  $button             GUISetAccelerators
( $aAccelKey )         EndSwitch WEnd 
mais il faut désactiver GUISetAccelerators() pour l’empêcher d'incrémenter $i. Perso, je préfère la solution au-dessus
Cordialement,"Horas non numero nisi serenas " Le canon de midi 
						 
		 
				
		
		 
	 
				
		
		
			
				
																			
								littlechiki 							 
						Niveau 3 			
		Messages :  48 Enregistré le :  sam. 13 avr. 2019 13:58
	Status : 
			Hors ligne 
	 
		 
		
						
					
													
							
						
	#11 
			
									
						Message 
					 
								par littlechiki  dim. 15 sept. 2019 18:51 
			
			
			
			
			Oh merci ça marche parfaitement ! Je trouve aussi que la méthode avec le hotkeyset est meilleure mais comme je devrais me servir de la touche si je sors de l'application, je vais me servir de l'accelerator (tout en gardant l'idée du hotkeyset sous la main).