Page 1 sur 1
[R] Impossible de récupérer l'état d'un bouton Radio
Posté : mar. 21 févr. 2023 14:01
par ltrautoit
Bonjour,
Je tente de récupérer l'état d'une liste de contrôles radio, mais j'ai systématiquement une erreur :
Pour créer les contrôles, j'utilise (extrait) :
$Radio1 = GUICtrlCreateRadio("ATQ1 Activé", 88, 152, 113, 17)$Radio2 = GUICtrlCreateRadio("ATQ2 Activé", 88, 176, 113, 17)$Radio3 = GUICtrlCreateRadio("ATQ3 Activé", 88, 200, 113, 17)
pour récupérer l'état, j'ai tenté avec GUICtrlGetState et GUICtrlRead, mais j'ai toujours l'erreur -1 ou 0 quel que soit l'état du contrôle.
avec ceci :
J'ai aussi tenté avec
, mais le résultat est toujours OK ou HS quel que soit l'état réel du controle
J'ai surement oublié quelque chose,mais je n'arrive pas à trouver quoi. Une piste, une idée ?
Re: [..] Impossible de récupérer l'état d'un bouton Radio
Posté : mar. 21 févr. 2023 16:08
par mikell
Une idée, voui
Ce que tu as oublié c'est de lire la page de ce bon vieux helpfile sur GUICtrlRead
Re: [..] Impossible de récupérer l'état d'un bouton Radio
Posté : mar. 21 févr. 2023 17:39
par ltrautoit
Je ne crois pas non !
Tu aurais quelque chose de plus précis ? Par ce que la, tu as l'air de dire que je n'ai fais aucun test.
(Désolé, mais je sais accéder au fichier d'aide, l'utiliser, rechercher dedans, tout comme je sais rechercher sur internet [ou dans le forum autoit, français ou anglais])
Re: [..] Impossible de récupérer l'état d'un bouton Radio
Posté : mar. 21 févr. 2023 18:37
par jchd
Qu'est-ce qui n'est pas clair dans le fichier d'aide ?
Paramètre
controlID L'ID du contrôle tel que retourné par une fonction GUICtrlCreate...(), ou -1 pour désigner le dernier contrôle créé.
Re: [..] Impossible de récupérer l'état d'un bouton Radio
Posté : mar. 21 févr. 2023 20:51
par mikell
Plus précis ? voui. ça veut dire PAS de GUICtrlGetState. La page sur GUICtrlRead :
GUICtrlRead : Read state or data of a control.
...
Return Value : Checkbox, Radio : state of the button. See State table
...
Remarks : For Checkbox and Radio controls only the $GUI_CHECKED (1), $GUI_UNCHECKED (4) or $GUI_INDETERMINATE (2) states are returned so the value can be used directly.
Donc je ne dis pas que tu n'as pas fait de tests, je dis que peut-être tu n'as pas lu la bonne page
Sinon pour le reste, voir le message de jc ci-dessus
Re: [..] Impossible de récupérer l'état d'un bouton Radio
Posté : mer. 22 févr. 2023 11:38
par ltrautoit
Désolé, mais ca veut pas, mais alors pas du tout.
Suite aux réponses précédentes, j'ai fait l'essai avec GUICtrlRead :
MsgBox (4096, "BitAnd(GUICtrlRead $Radio" & $i, BitAnd(GUICtrlRead("$Radio" & $i),$GUI_CHECKED)) => Résultat = 0 quelque soit l'état du contrôle radio (coché ou non)
MsgBox (4096, "GUICtrlRead $Radio" & $i, GUICtrlRead("$Radio" & $i)) => Résultat = 0 quelque soit l'état du contrôle radio (coché ou non)
MsgBox (4096, "GUICtrlGetState $Radio", GUICtrlGetState("$Radio" & $i)) => Résultat = -1 quelque soit l'état du contrôle radio (coché ou non)
J'ai fait l'essai en testant avec le numéro du contrôle (au cas ou je me serais gouré dans le nom), mais pas mieux ....
Ca sent la grosse connerie que j'aurais oublié, mais je ne trouve pas.... (ouinnnnnnn

)
Re: [..] Impossible de récupérer l'état d'un bouton Radio
Posté : mer. 22 févr. 2023 13:10
par jchd
Est-ce que ceci ouvre un chakra ?
Code : Tout sélectionner
GUICreate("My GUI radio")
$Radio1 = GUICtrlCreateRadio("ATQ1 Activé", 88, 152, 113, 17)
$i = 1
$EtatS = GUICtrlRead("$Radio" & $i)
ConsoleWrite("Variable" & @TAB & "Type" & @TAB & "Valeur" & @LF)
ConsoleWrite("$Radio & $i" & @TAB & VarGetType("$Radio" & $i) & @TAB & "$Radio" & $i & @LF)
ConsoleWrite("$EtatS " & @TAB & VarGetType($EtatS) & @TAB & $EtatS & @LF)
$EtatID = GUICtrlRead($Radio1)
ConsoleWrite("$Radio1 " & @TAB & VarGetType($Radio1) & @TAB & $Radio1 & @LF)
ConsoleWrite("$EtatID " & @TAB & VarGetType($EtatID) & @TAB & $EtatID & @LF)
Relire 42 fois mon post précédent et/ou la page d'aide de GUICtrlRead.
Re: [..] Impossible de récupérer l'état d'un bouton Radio
Posté : jeu. 23 févr. 2023 10:46
par ltrautoit
jchd a écrit : ↑mer. 22 févr. 2023 13:10
Est-ce que ceci ouvre un chakra ?
Ca progresse, ca progresse, mais ...
Sauf erreur de ma part, le problème était la différence de type entre "$Radio" & $i et $Radio1 (L'un est vu en string, l'autre en int32).
J'ai donc fait un test avec :
+
$EtatS = GUICtrlRead($Test)MsgBox (4096,"","Variable Test" & @TAB & "Type" & @TAB & "Valeur" & @LF)MsgBox (4096,"","$Test" & @TAB & VarGetType($Test) & @TAB & $Test & @LF)MsgBox (4096,"","$EtatS " & @TAB & VarGetType($EtatS) & @TAB & $EtatS & @LF) MsgBox (4096, "test BitAnd(GUICtrlRead ", BitAnd(GUICtrlRead($Test),$GUI_CHECKED)) MsgBox (4096, "test GUICtrlRead $test", GUICtrlRead($Test)) MsgBox (4096, "test GUICtrlGetState $test", GUICtrlGetState($Test))
J'obtiens le résultat suivant : (que l'élément radio soit sélectionné ou pas)
Code : Tout sélectionner
Variable Test Type Valeur
$Test Int32 63
$Etat Int32 0
0
0
-1
La, j'ai quand même l'impression d'être pile poil dans les exemples du fichier d'aide, mais j'ai l'impression que tous les chakras ne sont pas ouverts.
Mais je n'arrive pas à voir où j'ai glissé.

Re: [..] Impossible de récupérer l'état d'un bouton Radio
Posté : jeu. 23 févr. 2023 12:12
par mikell
Bon, les formulations type "Radio & $i" sont sources d'emmerdes mais c'est quand même utilisable avec
Eval (voir la page correspondante dans l'aide)
En général cette méthode n'est pas recommandée, il vaut mieux utiliser une array pour stocker les IDs et boucler dedans
Teste ça dans le script de jc :
Re: [..] Impossible de récupérer l'état d'un bouton Radio
Posté : jeu. 23 févr. 2023 14:09
par ltrautoit
Merci pour cette info du Eval. Effectivement, c'est mieux avec la boucle $i (Le type est bien passé en int autant au niveau du champ radio que du résultat).
Par contre, je n'arrive pas à comprendre pourquoi j'ai toujours un résultat en erreur même avec un champ radio simple type $Test.
M'énerve, m'énerve, m'énerve...
J'ai l'impression de tourner en rond

Re: [..] Impossible de récupérer l'état d'un bouton Radio
Posté : jeu. 23 févr. 2023 14:28
par mikell
Franchement je vois pas où est le problème ...
Peut-être que tu aurais pu poster un script fonctionnel pour illustrer le truc parce que pour moi ça marche
Là je peux pas faire plus simple :
#include <GUIConstantsEx.au3>GUICreate("My GUI radio")$Radio1 = GUICtrlCreateRadio("Radio 1", 10, 10, 120, 20)$Radio2 = GUICtrlCreateRadio("Radio 2", 10, 40, 120, 20)$Radio3 = GUICtrlCreateRadio("Radio 3", 10, 70, 120, 20)$Button = GUICtrlCreateButton("Button", 10, 100, 80, 20)GUICtrlSetState($Radio2, $GUI_CHECKED)GUISetState()While 1 $idMsg = GUIGetMsg() Select Case $idMsg = $GUI_EVENT_CLOSE ExitLoop Case $idMsg = $Button $txt = "" For $i = 1 to 3 $txt &= GUICtrlRead(Eval("Radio" & $i)) & @crlf Next ; $GUI_CHECKED = 1, $GUI_UNCHECKED = 4 MsgBox(0, "", $txt) EndSelectWEnd
Re: [..] Impossible de récupérer l'état d'un bouton Radio
Posté : jeu. 23 févr. 2023 16:56
par ltrautoit
Bon, ca me gonfle...
Merci à tous pour les réponses.
Je vais reprendre voir s'il n'y a pas de problème d'orthographe, par exemple ou autre trucs du même type.
Autrement, je passerais tout avec des boutons (ca je sais le faire fonctionner.)
Re: [..] Impossible de récupérer l'état d'un bouton Radio
Posté : jeu. 23 févr. 2023 19:09
par jl56
Bonjour,
Si je puis me permettre de simplifier un peu plus l' exemple de Mikell merci a lui
J'utilise beaucoup une fonction "_IsChecked($controle) en bas de l'exemple" pour tester les boutons radios ou des cases à cocher
#include <GUIConstantsEx.au3>GUICreate("My GUI radio")$Radio1 = GUICtrlCreateRadio("Radio 1", 10, 10, 120, 20)$Radio2 = GUICtrlCreateRadio("Radio 2", 10, 40, 120, 20)$Radio3 = GUICtrlCreateRadio("Radio 3", 10, 70, 120, 20)$Button = GUICtrlCreateButton("Button", 10, 100, 80, 20)GUICtrlSetState($Radio2, $GUI_CHECKED)GUISetState()While 1 $idMsg = GUIGetMsg() Select Case $idMsg = $GUI_EVENT_CLOSE ExitLoop Case $idMsg = $Button If _IsChecked
($Radio1) then MsgBox(0, "", "Le bouton radio sélectionné est le 1") If _IsChecked
($Radio2) then MsgBox(0, "", "Le bouton radio sélectionné est le 2") If _IsChecked
($Radio3) then MsgBox(0, "", "Le bouton radio sélectionné est le 3") EndSelectWEndFunc _IsChecked
($controle) Return BitAND(GUICtrlRead($controle), $GUI_CHECKED) = $GUI_CHECKEDEndFunc ;==>_IsChecked
de cette façon c'est aussi simple qu'un bouton
cordialement,
JL56
Re: [R] Impossible de récupérer l'état d'un bouton Radio
Posté : ven. 24 févr. 2023 14:50
par ltrautoit
CA Y EST !

J'ai trouvé ma connerie !
En fait, le code fourni est appelé dans une fonction appelée via une HotKeySet.
Cette fonction crée la GUI (avec des contrôles radio et des boutons) et recueille les infos sur les éléments sélectionnés.
Sauf que :
Lorsque qu'on sélectionne un bouton , il y a un switch avec une série de case, et la, il y a un GUIDelete AVANT la fonction de traitement de l'action.
et ca,
ca fonctionne avec un bouton mais PAS avec un élément radio.
Maintenant, j'arrive bien a récupérer la valeur d'un élément radio si je déplace le GUIDelete APRES la commande.
Tout con, mais il fallait y penser.
@Mikell : Je n'ai pas réussi à faire fonctionner la boucle ("$Radio" & $i), même avec le Eval(***. Tant pis, je les aient mis en explicite, ca fait juste 10 ligne de if**** au lieu d'une boucle for 1 to 10.
Je passe en rétabli
Re: [R] Impossible de récupérer l'état d'un bouton Radio
Posté : mar. 28 févr. 2023 04:35
par Nine
pvi - ce code est obsolète
Code : Tout sélectionner
Func _IsChecked($controle)
Return BitAND(GUICtrlRead($controle), $GUI_CHECKED) = $GUI_CHECKED
EndFunc ;==>_IsChecked
Le fichier d'aide est clair, GUICtrlRead($controle) retourne seulement 0 ou 1. Pas besoin de BitAnd...