Page 1 sur 1

[R] GUICtrlRead(2 Checkbox)

Posté : mar. 18 janv. 2011 09:30
par nav53
Bonjour,
J'aurais aimé faire une fonction du style "GUICtrlRead" pour 2 checkbox ou lorsque 2 checkbox = 1 --> faire telle commande
et si une sur les deux faire autre chose.
J'ai trouvé une fonction _IsChecked mais je n'ai pas compris son fonctionnement.

Merci d'avance

Re: [..] GUICtrlRead(2 Checkbox)

Posté : mar. 18 janv. 2011 10:52
par zeshrek
j'ai pas regardé _ischecked, moi je fais plutot comme ca :

Code : Tout sélectionner

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

; un form, 2 checkbox, et un bouton ok
$Form1 = GUICreate("Form1", 275, 151, 192, 114)
$Action = GUICtrlCreateCheckbox("Action a faire", 72, 32, 97, 17)
$Confirm = GUICtrlCreateCheckbox("Confirmation", 72, 64, 97, 17)
$BtnOK = GUICtrlCreateButton("Go", 100, 100, 75, 21)
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $BtnOK
            _check()
    EndSwitch
WEnd

Func _check()
    $ActionStatus = BitAND(GUICtrlRead($Action), $GUI_CHECKED) ; on récupere l'état de la premiere checkbox, cochée ou non (on ignore les autres éléments)
    $ConfirmStatus = BitAND(GUICtrlRead($Confirm), $GUI_CHECKED) ; idem pour la 2eme

    $agir = BitAND($ActionStatus, $ConfirmStatus) ; on compare les deux.

    If $agir = True Then
        MsgBox(0, "", "Les 2 sont cochés, alors on peut agir")
    Else
        MsgBox(0, "", "Au moins un des deux n'est pas coché, donc on fait rien")
    EndIf
EndFunc   ;==>_check

Re: [..] GUICtrlRead(2 Checkbox)

Posté : mar. 18 janv. 2011 11:26
par nav53
Merci beaucoup je vais tester ça et merci pour les explications j'ai un peu de mal à comprendre avec les "BitAND" :D

Re: [..] GUICtrlRead(2 Checkbox)

Posté : mar. 18 janv. 2011 12:15
par zeshrek
De rien
BitAND fait une opération logique AND sur les valeurs qui lui sont retournées.
Si tu veux faire la même chose a la main, tu les convertis en binaire, tu les supperposes, et ne donne un 1 que les colonnes qui ont toutes un 1.
ex 3 chiffres au pif : 568, 945 et 3565
Tu les passes en binaire, soit : 1000111000, 1110110001, 110111101101
Puis tu les supperpose (en ajoutant des zeros si il faut a gauche pour que les derniers chiffres soient allignés), et tu regardes les colonnes ou il y a des 1 a tous les niveaux :
001000111000
001110110001
110111101101
------------
000000100000
= 32

Ca c'était la théorie.
Maintenant en pratique, qu'est ce que j'ai fait ?
J'ai pris le statut de mes checkbox (les guictrlread) que j'ai 'filtré' pour ne garder que l'état de la coche (le bitand avec $GUI_CHECKED permet de ne garder que celui ci, et de virer les autres status (sélectionné ou non, actif ou non... et (vois l'aide de la commande guicrtlread)))
Ensuite le dernier bitand compare le statut des 2 checkbox.
Si ils sont cochés tous les 2 on a 1, sinon zero.
Et comme 1 = true, je peux faire mon test if $agir=true (je prefere utiliser true que 1, c'est mon choix... ;) )

Re: [..] GUICtrlRead(2 Checkbox)

Posté : mer. 19 janv. 2011 11:10
par nav53
Ah ok ! Je voyais pas du tout ça sous cet angle. Effectivement je vois mieux ce que fait la fonction maintenant :D

Et sinon j'ai intégré la fonction à mon script et ça fonctionne super bien merci pour cette aide et ces explications en espérant pouvoir faire d'autres fonctions du même genre seul la prochaine fois :)