Probleme avec les checkbox

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
YuChan
Niveau 5
Niveau 5
Messages : 113
Enregistré le : jeu. 12 nov. 2020 14:09
Status : Hors ligne

Probleme avec les checkbox

#1

Message par YuChan »

Bonjour a tous,

J'ai cette fameuse GUI :

Code : Tout sélectionner

	$zic = GUICreate("Choix de type de musique", 179, 88, 202, 124)
	$checkRap = GUICtrlCreateCheckbox("Rap", 96, 8, 73, 17)
	$checkClassic = GUICtrlCreateCheckbox("Classic", 8, 8, 65, 17)
	$checkRock = GUICtrlCreateCheckbox("Rock", 8, 32, 65, 17)
	$checkMetal = GUICtrlCreateCheckbox("Metal", 96, 32, 65, 17)
	$Button1 = GUICtrlCreateButton("OK", 8, 56, 75, 25)
	$Button2 = GUICtrlCreateButton("Annuler", 96, 56, 75, 25)
	GUISetState(@SW_HIDE)
Comment on peux voir je souhaite a l'utilisateur de choisir son type de musique
Mais le probleme c'est que je ne sais pas récupérer les case coché.

Sinon j'ai sa en réserve sauf que cela ne marche que pour une case a cocher :

Code : Tout sélectionner

        If $idMsg = $Button1 Then
            If _IsChecked($checkRap) Then
                MsgBox($MB_SYSTEMMODAL, "", "La checkbox est cochée.", 0, $zic)
            Else
                MsgBox($MB_SYSTEMMODAL, "", "La checkbox n'est pas cochée.", 0, $zic)
            EndIf
        EndIf
Si quelqu'un peu m’éclairer ce serai sympas.

Cdt
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Probleme avec les checkbox

#2

Message par walkson »

Bonjour,

Code : Tout sélectionner

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $zic = GUICreate("Choix de type de musique", 180, 89, 202, 124)
Global $checkRap = GUICtrlCreateCheckbox("Rap", 96, 8, 73, 17)
Global $checkClassic = GUICtrlCreateCheckbox("Classic", 8, 8, 65, 17)
Global $checkRock = GUICtrlCreateCheckbox("Rock", 8, 32, 65, 17)
Global $checkMetal = GUICtrlCreateCheckbox("Metal", 96, 32, 65, 17)
Global $Button1 = GUICtrlCreateButton("OK", 8, 56, 75, 25)
Global $Button2 = GUICtrlCreateButton("Annuler", 96, 56, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Local $Classic, $Rock, $Metal, $Rap = "j'aime pas le rap"
While 1
 $nMsg = GUIGetMsg()
 Switch $nMsg
  Case $GUI_EVENT_CLOSE, $Button2
   Exit

	 Case $Button1
		 If _IsChecked($checkClassic) Then $Classic = "classic"
		 If _IsChecked($checkRap) Then $Rap = "j'aime le rap"
		 If _IsChecked($checkRock) Then $Rock = "rock"
		 If _IsChecked($checkMetal) Then $Metal = "métal"
		 MsgBox(0,"",$Rap & @CRLF & $Rock & @CRLF & $Classic & @CRLF & $Metal)
		 $Classic = ""
		 $Rock = ""
		 $Metal = ""
		 $Rap = "j'aime pas le rap"
		 GUICtrlSetState($checkClassic,4) ;$GUI_UNCHECKED (4)
		 GUICtrlSetState($checkRap,4)
		 GUICtrlSetState($checkRock,4)
		 GUICtrlSetState($checkMetal,4)
 EndSwitch
WEnd
Func _IsChecked($idControlID)
    Return BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) = $GUI_CHECKED
EndFunc   ;==>_IsChecked
Après si vous avez beaucoup de checkbox, vous avez cette solution
(on enregistre les ID des contrôles dans un array)

Code : Tout sélectionner

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Local $sort[13] = ["Rap","Classic","Rock","Metal","Blues rock","Country","Folk","Flamenco","Fun-punk","Gospel","Hip-hop alternatif","Indie folk","New age"]
Local $sortID[13] ; ID des Checkbox
Local $top = 5
Global $zic = GUICreate("Choix de type de musique", 180, 289)
For $i = 0 To UBound($sortID) - 1
	$sortID[$i] = GUICtrlCreateCheckbox($sort[$i],5,$top)
	$top += 18
Next

Global $Button1 = GUICtrlCreateButton("OK", 8, 256, 75, 25)
Global $Button2 = GUICtrlCreateButton("Annuler", 96, 256, 75, 25)
GUISetState(@SW_SHOW)

Local $result
While 1
 $nMsg = GUIGetMsg()
 Switch $nMsg
  Case $GUI_EVENT_CLOSE, $Button2
   Exit

	 Case $Button1
		For $i = 0 To UBound($sortID) - 1
			If _IsChecked($sortID[$i]) Then $result &= GUICtrlRead($sortID[$i],1) & @CRLF
		Next
		 MsgBox(0,"",$result)
		 $result = ""

 EndSwitch
WEnd
Func _IsChecked($idControlID)
    Return BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) = $GUI_CHECKED
EndFunc   ;==>_IsChecked
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
YuChan
Niveau 5
Niveau 5
Messages : 113
Enregistré le : jeu. 12 nov. 2020 14:09
Status : Hors ligne

Re: Probleme avec les checkbox

#3

Message par YuChan »

Merci pour votre reponse.

J'ai bien saisi le code par contre pourquoi pour récupérer les cases coché je peu pas faire ça ?

Code : Tout sélectionner

				
					$nMsg = GUIGetMsg()
					
					Switch $nMsg
						Case $GUI_EVENT_CLOSE, $Button2
						ExitLoop 

						 Case $Button1
							For $i = 0 To UBound($sortID) - 1
								If _IsChecked($sortID[$i]) Then 
									$result &= GUICtrlRead($sortID[$i],1) & ","

									$split = StringSplit($result, ",")
									MsgBox(0, "test", $split)
								EndIf
							Next

					EndSwitch
				WEnd
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Probleme avec les checkbox

#4

Message par walkson »

StringSplit
Découpe une chaîne en tableau de sous-chaînes selon des caractères de coupure.
https://www.autoitscript.fr/autoit3/doc ... gSplit.htm

Un array ne rentre pas dans un MsgBox ! ou bien il faut le lire $split[0] etc...
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Probleme avec les checkbox

#5

Message par walkson »

Je vous mets un petit exemple qui n'utilise pas stringsplit() et qui renvoie les résultats sur une list ou sur un array sachant qu'une chaîne comme
"A|B|C|D" vous renvoie un tableau de 4 lignes. Les explications sont dans le code

Code : Tout sélectionner

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>

Local $sort[13] = ["Rap","Classic","Rock","Metal","Blues rock","Country","Folk","Flamenco","Fun-punk","Gospel","Hip-hop alternatif","Indie folk","New age"]
_ArrayColInsert($sort, 0) ;$sort[13] devient en 2D, ID des Checkbox sur colonne 0 et musique sur colonne 1

Local $top = 5
Global $zic = GUICreate("Choix de type de musique", 280, 289,500)
For $i = 0 To UBound($sort) - 1
	$sort[$i][0] = GUICtrlCreateCheckbox($sort[$i][1],5,$top)
	$top += 18
Next
_ArrayDisplay($sort,"Pour voir","",0,Default,"col_0 = ID|col_1 = Musique")

Global $liste = GUICtrlCreateList("",120,5,150,250)
Global $Button1 = GUICtrlCreateButton("OK", 8, 256, 75, 25)
Global $Button2 = GUICtrlCreateButton("Annuler", 96, 256, 75, 25)
GUISetState(@SW_SHOW)

Local $result, $array[0]
While 1
 $nMsg = GUIGetMsg()
 Switch $nMsg
  Case $GUI_EVENT_CLOSE, $Button2
   Exit

	 Case $Button1
		 GUICtrlSetData($liste,"")
		For $i = 0 To UBound($sort) - 1;on parcoure les lignes (de 0 à 12)
			If _IsChecked($sort[$i][0]) Then; on vérifie les Checked des Checkbox de la première colonne (colonne 0)
				;$result &= StringUpper("j'aime le  " & GUICtrlRead($sort[$i][0],1)) & "|"; on lit le texte du Checkbox
				$result &= StringUpper("j'aime le  " & $sort[$i][1]) & "|"; on lit directement sur l'array "$sort" en colonne 1
			Else
				$result &= "je n'aime pas le " & GUICtrlRead($sort[$i][0],1) & "|"
			EndIf

		Next
		$result = StringTrimRight($result,1) ;on supprime le dernier "|"
		GUICtrlSetData($liste,$result)
		;======== autre méthode =============
		_ArrayAdd($array,$result)
		_ArrayDisplay($array)
		ReDim $array[0];on vide l'array
		;===============================
		 $result = ""
		For $i = 0 To UBound($sort) - 1
			GUICtrlSetState($sort[$i][0],4);$GUI_UNCHECKED
		Next
 EndSwitch
WEnd
Func _IsChecked($idControlID)
    Return BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) = $GUI_CHECKED
EndFunc   ;==>_IsChecked
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Répondre