Page 1 sur 1

Interdire plus de x nombre de checkbox cochées

Posté : jeu. 26 oct. 2017 11:42
par Maxdylan
Bonjour.

Et bien comme mon sujet l'indique, je suis à la recherche d'une fonction ne permettant que la coche de 2 checkbox. Les checkbox non cochées serai alors grisées.

Voici une partie de mon code

Code : Tout sélectionner

If   $Checkbox1 And BitAND(GUICtrlRead($Checkbox1), $GUI_CHECKED) = $GUI_CHECKED Then
            $item1
			EndIf
If   $Checkbox2 And BitAND(GUICtrlRead($Checkbox2), $GUI_CHECKED) = $GUI_CHECKED Then
			$item2
EndIf

If   $Checkbox3 And BitAND(GUICtrlRead($Checkbox3), $GUI_CHECKED) = $GUI_CHECKED Then
			$item3
EndIf

If  $Checkbox4 And BitAND(GUICtrlRead($Checkbox4), $GUI_CHECKED) = $GUI_CHECKED Then
			$item4
EndIf

If   $Checkbox5 And BitAND(GUICtrlRead($Checkbox5), $GUI_CHECKED) = $GUI_CHECKED Then
			$item5
EndIf

If   $Checkbox6 And BitAND(GUICtrlRead($Checkbox6), $GUI_CHECKED) = $GUI_CHECKED Then
			$item6
EndIf

If   $Checkbox7 And BitAND(GUICtrlRead($Checkbox7), $GUI_CHECKED) = $GUI_CHECKED Then
			$item7
EndIf

If   $Checkbox8 And BitAND(GUICtrlRead($Checkbox8), $GUI_CHECKED) = $GUI_CHECKED Then
			$item8
		EndIf

EndFunc
Mon autre soucis mais moins important, plutot gadjet serai de poser la checkbox sur une image. La checkbox devient inutilisable si elle est posée sur l'image. Si une solution existe, je suis preneur. J'ai déjà consulté énormément de doc mais impossible de trouver cette solution.

Merci de votre aide.

Re: Interdire plus de x nombre de checkbox cochées

Posté : dim. 29 oct. 2017 17:37
par Jerem
Bonjour,

Voici ma proposition.

Code : Tout sélectionner

#include <GUIConstantsEx.au3>

; Le clic sur une case est plus facile à contrôler dans ce mode.
Opt ("GuiOnEventMode", 1)

Local $fenetre = GUICreate ("Limite de cases", 440, 420)
GUISetOnEvent ($GUI_EVENT_CLOSE, "Quitter")

; Nombre de cases.
Local $nbCtrlCheck = 20
; Tableau de cases.
Local $tabCheck [$nbCtrlCheck]
; Nombre de cases cochées autorisées.
Local $maxCheck = 2
; Nombre de cases actuellement cochées.
Local $nbCheck = 0

; Position de départ des cases.
Local $top = -20
Local $left = 30

; Création des cases.
For $i = 0 To ($nbCtrlCheck - 1)
	; On descend la cases suivantes ou on la décale.
	If Mod ($i, 2) = 0 Then
		$left = 30
		$top += 40
	Else
		$left = 240
	EndIf

	$tabCheck [$i] = GUICtrlCreateCheckbox ("Ceci est la case à cocher N° " & $i, $left, $top)
	GUICtrlSetOnEvent ($tabCheck [$i], "CheckBox")
Next

GUISetState ()

While True

WEnd

; Lors d'un clic sur une case.
Func CheckBox ()
	; Si l'on coche une case.
	If (GUICtrlRead (@GUI_CtrlId) = $GUI_CHECKED) Then
		; On incrémente le nombre de cases cochées.
		$nbCheck += 1
		; Si l'on atteint la limite.
		If ($nbCheck = $maxCheck) Then
			For $i = 0 To ($nbCtrlCheck - 1)
				; On désactive les cases non cochées.
				If Not (GUICtrlRead ($tabCheck [$i]) = $GUI_CHECKED) Then GUICtrlSetState ($tabCheck [$i], $GUI_DISABLE)
			Next
		EndIf
	Else ; Si l'on décoche une case.
		; On décrémente le nombre de cases cochées.
		$nbCheck -= 1
		; Si l'on est juste en dessous du maximum de cases coshées.
		If ($nbCheck = ($maxCheck - 1)) Then
			For $i = 0 To ($nbCtrlCheck - 1)
				; On active toutes les cases.
				GUICtrlSetState ($tabCheck [$i], $GUI_ENABLE)
			Next
		EndIf
	EndIf
EndFunc


Func Quitter ()
	Exit
EndFunc

Re: Interdire plus de x nombre de checkbox cochées

Posté : lun. 30 oct. 2017 10:00
par mikell
Incrémenter/décrémenter une variable est la bonne solution
Pour une checkbox transparente sur image, tu pourrais essayer ça
#include <GUIConstantsEx.au3>

$cat = @tempdir & "\cat.jpg"
InetGet("http://affz.free.fr/autoit/cat_us.jpg", $cat)

$gui = GUICreate("g1", 180, 180, -1, 50)
$pic = GuiCtrlCreatePic($cat, 0, 0, 180, 180)
GUICtrlSetState(-1, $GUI_DISABLE)
$cb = GuiCtrlCreateCheckbox("chat", 50, 5, 60, 20)
DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle($cb), "wstr", 0, "wstr", 0)
GUICtrlSetColor(-1, 0xffffff)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUISetState()

While 1
$msg = GUIGetMsg()
  Switch $msg
    Case $GUI_EVENT_CLOSE
         Exit
    Case $cb
   Msgbox(0,"", "ça marche")
  EndSwitch
WEnd