Interdire plus de x nombre de checkbox cochées

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Maxdylan
Niveau 1
Niveau 1
Messages : 1
Enregistré le : jeu. 26 oct. 2017 11:34
Status : Hors ligne

Interdire plus de x nombre de checkbox cochées

#1

Message 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.
Jerem
Niveau 2
Niveau 2
Messages : 25
Enregistré le : ven. 17 mai 2013 11:13
Status : Hors ligne

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

#2

Message 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
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#3

Message 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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Répondre