[R] Impossible de récupérer l'état d'un bouton Radio

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
ltrautoit
Niveau 4
Niveau 4
Messages : 50
Enregistré le : mer. 23 mars 2011 15:19
Status : Hors ligne

[R] Impossible de récupérer l'état d'un bouton Radio

#1

Message 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 :
MsgBox (4096, "Radio i", GUICtrlGetState("$Radio" & $i))

J'ai aussi tenté avec
BitAnd(GUICtrlGetState("$Radio" & $i), $GUI_CHECKED) = $GUI_CHECKED
, 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 ?
Modifié en dernier par ltrautoit le ven. 24 févr. 2023 15:24, modifié 1 fois.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Impossible de récupérer l'état d'un bouton Radio

#2

Message par mikell »

Une idée, voui :mrgreen:

Ce que tu as oublié c'est de lire la page de ce bon vieux helpfile sur GUICtrlRead
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
ltrautoit
Niveau 4
Niveau 4
Messages : 50
Enregistré le : mer. 23 mars 2011 15:19
Status : Hors ligne

Re: [..] Impossible de récupérer l'état d'un bouton Radio

#3

Message 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])
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2272
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Impossible de récupérer l'état d'un bouton Radio

#4

Message 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éé.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Impossible de récupérer l'état d'un bouton Radio

#5

Message 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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
ltrautoit
Niveau 4
Niveau 4
Messages : 50
Enregistré le : mer. 23 mars 2011 15:19
Status : Hors ligne

Re: [..] Impossible de récupérer l'état d'un bouton Radio

#6

Message 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))
            MsgBox (4096, "GUICtrlRead $Radio" & $i, GUICtrlRead("$Radio" & $i))
            MsgBox (4096, "GUICtrlGetState $Radio", GUICtrlGetState("$Radio" & $i))
 

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 :oops: :oops: :oops: )
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2272
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Impossible de récupérer l'état d'un bouton Radio

#7

Message 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.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
ltrautoit
Niveau 4
Niveau 4
Messages : 50
Enregistré le : mer. 23 mars 2011 15:19
Status : Hors ligne

Re: [..] Impossible de récupérer l'état d'un bouton Radio

#8

Message 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 :
$Test = GUICtrlCreateRadio("Test", 256, 352, 145, 17)
+
$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é. :?: :( :(
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Impossible de récupérer l'état d'un bouton Radio

#9

Message 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 :

$EtatE = GUICtrlRead(Eval("Radio" & $i))
ConsoleWrite('Eval("Radio" & $i)' & @TAB & VarGetType(Eval("Radio" & $i)) & @TAB & Eval("Radio" & $i) & @LF)
ConsoleWrite("$EtatE     " & @TAB & VarGetType($EtatE) & @TAB & $EtatE & @LF)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
ltrautoit
Niveau 4
Niveau 4
Messages : 50
Enregistré le : mer. 23 mars 2011 15:19
Status : Hors ligne

Re: [..] Impossible de récupérer l'état d'un bouton Radio

#10

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

Re: [..] Impossible de récupérer l'état d'un bouton Radio

#11

Message 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)
   EndSelect
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 )
ltrautoit
Niveau 4
Niveau 4
Messages : 50
Enregistré le : mer. 23 mars 2011 15:19
Status : Hors ligne

Re: [..] Impossible de récupérer l'état d'un bouton Radio

#12

Message 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.)
Avatar du membre
jl56
Niveau 7
Niveau 7
Messages : 411
Enregistré le : mer. 24 oct. 2007 22:42
Localisation : 56000
Status : Hors ligne

Re: [..] Impossible de récupérer l'état d'un bouton Radio

#13

Message 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")

   EndSelect
WEnd


Func _IsChecked($controle)
   Return BitAND(GUICtrlRead($controle), $GUI_CHECKED) = $GUI_CHECKED
EndFunc   ;==>_IsChecked

de cette façon c'est aussi simple qu'un bouton

cordialement,

JL56
ltrautoit
Niveau 4
Niveau 4
Messages : 50
Enregistré le : mer. 23 mars 2011 15:19
Status : Hors ligne

Re: [R] Impossible de récupérer l'état d'un bouton Radio

#14

Message par ltrautoit »

CA Y EST ! :idea: J'ai trouvé ma connerie ! :idea:

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
Avatar du membre
Nine
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 103
Enregistré le : ven. 17 avr. 2020 01:23
Status : Hors ligne

Re: [R] Impossible de récupérer l'état d'un bouton Radio

#15

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