Page 1 sur 1

Probleme avec les checkbox

Posté : mar. 25 janv. 2022 14:13
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

Re: Probleme avec les checkbox

Posté : mar. 25 janv. 2022 17:34
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

Re: Probleme avec les checkbox

Posté : mer. 26 janv. 2022 06:37
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

Re: Probleme avec les checkbox

Posté : mer. 26 janv. 2022 10:45
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...

Re: Probleme avec les checkbox

Posté : mer. 26 janv. 2022 14:47
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