[R] Problème de radio et combo

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
erreur
Niveau 3
Niveau 3
Messages : 36
Enregistré le : ven. 06 févr. 2009 21:35
Status : Hors ligne

[R] Problème de radio et combo

#1

Message par erreur »

Bonjour,

Mon problème est le suivant:
J'ai une variable qui va être écrite dans un fichier texte qui peut soit être définie par un combo ou soit définie par l'utilisateur selon la case du radio qu'il a cochée. Quand l'utilisateur coche le combo un bug se produit et le programme écrit une variable qui n'a aucun sens dans le fichier texte (ex: 5 ,4101 ,8101 ...).

Voila mon code d'exemple pour résoudre mon problème:
► Afficher le texte
J'ai essayé plusieurs fois sans réussir à faire fonctionner correctement le programme, mais j'ai pu constater que le bug venait de la fonction if/endif car quand on l'enlève le programme fonctionne correctement mais l'utilisateur ne peut plus définir lui même le personnage.

Merci d'avance pour vos réponses.


PS: Désolé si je me suis tromper de rubrique.
Modifié en dernier par erreur le ven. 06 févr. 2009 23:23, modifié 2 fois.
Avatar du membre
jbnh
Niveau 11
Niveau 11
Messages : 1932
Enregistré le : ven. 02 mai 2008 14:54
Localisation : Bruxelles
Status : Hors ligne

Re: [...] Problème de radio et combo

#2

Message par jbnh »

Ceci devrait marcher :

Code : Tout sélectionner

if BitAND(GUICtrlRead($verrif_personnage1), $GUI_CHECKED) = $GUI_CHECKED Then
 
Merci d'utiliser les code couleur uniquement pour exemple de script et UDF
Balise [..] devant votre requête en cours, [R] quand résolu | Pas de message concernant les bots !

Merci
erreur
Niveau 3
Niveau 3
Messages : 36
Enregistré le : ven. 06 févr. 2009 21:35
Status : Hors ligne

Re: [...] Problème de radio et combo

#3

Message par erreur »

Merci beaucoup sa fonctionne très bien. Pourrais-tu m'expliquer un peu plus comment fonction BitAnd() ?
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [R] Problème de radio et combo

#4

Message par Iste »

BitAND permet D'effectuer un AND sur deux flags
Les flag, c'est une facon que l'on a trouvé pour donner plusieurs info (de type oui/non) sur une seule variable
la variable avec aucun flag est à 0
000000 en binaire
les flag sont des multiple de 2 (1,2,4,8 etc.), pour donner un flag, il faut additioner sa valeur à la variable
la variable avec le flag 8 est egale à 8
010000 en binaire
pour envoyer plusieurs flag, il suffit de les aditioner entre eux
la variable avec le flag 8 et le flag 2 est egale à 10
010010 en binaire

les diferent bit de la variable transportant les flag devienneny donc des booleen (variable egale 0 ou 1) indiquant Vrai ou Faux à differentes conditions.

L'opperateur AND compart les bit de deux valeurs, et renvoi 1 quand les deux bit sont sur 1
0 AND 0 = 0 ; 1 AND 0 = 0 ; 0 AND 1 = 0 ; 1 AND 1 = 1
1001 AND 0101 = 0001

GUICtrlRead($verrif_personnage1) renvoi le flag de l'etat de ton checkbox/radio
$GUI_CHECKED est une constante (variable prédéfini avant le debut du programme) correspondant au falg que renvoit une checkbox/radio cochée.

En appliquant AND sur ces deux valeur, on peut savoir si elle sont identique. Imaginons $GUI_CHECKED = 100101
100101 AND 100101 = 100101
Donc GUICtrlRead($verrif_personnage1) AND $GUI_CHECKED = $GUI_CHECKED

C'est une facon de comparer deux valeurs


En fait, le probleme, c'est que $verrif_personnage1 est egale a l'identifiant de ton objet (handle), il fallait utiliser un GUICtrlRead() pour savoir ce qu'il est et non pas qui il est.

Mais, une petite question,
if GUICtrlRead($verrif_personnage1) = $GUI_CHECKED Then
n'aurait pas marché aussi ?

Je ne m'y connait pas trop donc j'espere ne pas avoir dit de connerie

Edit d'apres avoir dormi ^^': effectivement, j'ai dis quelque conneries :(
If $v = $flag then ne fonctionne que si la liste des flag activés est la meme que celle comparé
Le BitAND permet justement de mettre en evidance un flag avant de lancer la comparaison, afin de savoir si ce flag et activé sans s'occuper des autres.

Attention

Dans ton code,
$personnage = GUICtrlCreateCombo ("Xelor", 160,35,80) ;Création du combo
$personnage = inputbox("DofusLoggeur","Indiquez le nom de votre choix:")

Tu utilise deux foi la variable $personnage pour deux elements !

Apres avoir ouver l'inputbox, la variable $personnage ne pointe plus vers le combo, et tu ne peux plus recuperer les informations s'y trouvants !

de plus, filewrite($file,$personnage) ecris l'handle d'un combo/input, il faut utiliser un GUICtrlRead() (mais le probleme soulevé plus haut demande a revoir ca ^^')

Mon conseil

Je ne sais pas ce que tu veux faire au final avec ton script, donc je ne dis pas que ce que je fais est mieux, mais dans l'etat actuel, il me semble plus simple de faire ceci :
► Afficher le texte
J'ai remplacé le bouton de la fenetre popup par une zone de saisie, et dans le IF, j'ai utilisé une nouvelle variable, dans la quel on ecrit le contenu, soit du combo soit de l'input suivant l'etat du radio.
Il suffit apres d'ecrire dans le fichier le contenu de cette variable
Modifié en dernier par Iste le sam. 07 févr. 2009 13:52, modifié 1 fois.
Signez ici
erreur
Niveau 3
Niveau 3
Messages : 36
Enregistré le : ven. 06 févr. 2009 21:35
Status : Hors ligne

Re: [R] Problème de radio et combo

#5

Message par erreur »

Merci beaucoup pour ce tuto très bien expliqué, c'est exactement ce que je voulais. :p
Répondre