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:00 		
		
											Localisation :  Bordeaux 
							
						
	Status : 
			Hors ligne 
	 
		 
		
						
					
													
							
						
	#2 
			
									
						Message 
					 
								par Tlem   »  ven. 13 sept. 2019 18:06 
			
			
			
			
			Bonjour. 
J'ai pas vraiment eu le temps de regarder en détail, mais est-ce qu'une petite pause après le GUICtrlSetData() n'améliorerais pas un peu ?
			
			
									
									
						 
		 
				
		
		 
	 
				
		
		
			
				
								walkson 							 
						Modérateur 			
		Messages :  1037  		Enregistré le :  ven. 12 août 2011 19:49 		
		
											Localisation :  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, 
Walkson 
"Horas non numero nisi serenas " Le canon de midi 
(Je ne compte que les heures heureuses) 
						 
		 
				
		
		 
	 
				
		
		
			
				
																			
								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:49 		
		
											Localisation :  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, 
Walkson 
"Horas non numero nisi serenas " Le canon de midi 
(Je ne compte que les heures heureuses) 
						 
		 
				
		
		 
	 
				
		
		
			
				
																			
								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:49 		
		
											Localisation :  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, 
Walkson 
"Horas non numero nisi serenas " Le canon de midi 
(Je ne compte que les heures heureuses) 
						 
		 
				
		
		 
	 
				
		
		
			
				
																			
								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 ! 
Maintenant pour atteindre la perfection, je me demandais, y aurait pas moyen de relancer le timer a chaque fois que le bouton est pressé ? Là ça empêcherait vraiment d’incrémenter car à chaque fois, on lui dirait d'incrémenter seulement si TimerDiff($tt) > 50 par exemple mais comme il relancerait le timer à chaque pressage de bouton, il n'atteindrait 50 que si on relâchait le bouton. Après je sais pas si ça serait possible... 
Mais c'est déjà proche de la perfection comme ça !
			
			
									
									
						 
		 
				
		
		 
	 
				
		
		
			
				
								walkson 							 
						Modérateur 			
		Messages :  1037  		Enregistré le :  ven. 12 août 2011 19:49 		
		
											Localisation :  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, 
Walkson 
"Horas non numero nisi serenas " Le canon de midi 
(Je ne compte que les heures heureuses) 
						 
		 
				
		
		 
	 
				
		
		
			
				
								walkson 							 
						Modérateur 			
		Messages :  1037  		Enregistré le :  ven. 12 août 2011 19:49 		
		
											Localisation :  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, 
Walkson 
"Horas non numero nisi serenas " Le canon de midi 
(Je ne compte que les heures heureuses) 
						 
		 
				
		
		 
	 
				
		
		
			
				
																			
								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). 
En tous cas, un grand merci pour ça ! Je passe le sujet en résolu !