[R] GUICtrlRead(2 Checkbox)

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
nav53
Niveau 1
Niveau 1
Messages : 12
Enregistré le : jeu. 06 janv. 2011 18:30
Status : Hors ligne

[R] GUICtrlRead(2 Checkbox)

#1

Message 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
Modifié en dernier par nav53 le mer. 19 janv. 2011 11:10, modifié 1 fois.
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] GUICtrlRead(2 Checkbox)

#2

Message 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
Si vis pacem para bellum
nav53
Niveau 1
Niveau 1
Messages : 12
Enregistré le : jeu. 06 janv. 2011 18:30
Status : Hors ligne

Re: [..] GUICtrlRead(2 Checkbox)

#3

Message par nav53 »

Merci beaucoup je vais tester ça et merci pour les explications j'ai un peu de mal à comprendre avec les "BitAND" :D
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] GUICtrlRead(2 Checkbox)

#4

Message 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... ;) )
Si vis pacem para bellum
nav53
Niveau 1
Niveau 1
Messages : 12
Enregistré le : jeu. 06 janv. 2011 18:30
Status : Hors ligne

Re: [..] GUICtrlRead(2 Checkbox)

#5

Message 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 :)
Répondre