Retrouver une variable depuis une fonction

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
littlechiki
Niveau 3
Niveau 3
Messages : 37
Enregistré le : sam. 13 avr. 2019 12:58
Status : Hors ligne

Retrouver une variable depuis une fonction

#1

Message par littlechiki » mar. 04 juin 2019 13:42

Bonjour, j'ai créé un code qui permet de baisser la valeur d'une variable mais j'ai cependant un problème, le problème étant que la baisse s'effectue sur la valeur de base et non sur la nouvelle valeur donnée. je vous ai créé un petit test pour que vous puissiez comprendre mon problème.
#include <GUIConstantsEx.au3>

Global $Ant[2]
$Ant[0] = 50
$Ant[1] = 50
Global $base[2]
$base[0] = $Ant[0]
$base[1] = $Ant[1]

$GUI = GUICreate("Form1",500,500,100,100)
Global $check[2]
$check[0] = GUICtrlCreateCheckbox("division 1",85,10,70,25)
$check[1] = GUICtrlCreateCheckbox("division 2",85,55,70,25)
$button1 = GUICtrlCreateButton("Baisse 1",10,10,70,40)
$button2 = GUICtrlCreateButton("Baisse 2",10,55,70,40)
Global $Label[2]
$Label[0] = GUICtrlCreateLabel("Base 1 : " & $base[0] & @CRLF & "Après baisse : " & $Ant[0],170,10,85,25)
$Label[1] = GUICtrlCreateLabel("Base 2 : " & $base[1] & @CRLF & "Après baisse : " & $Ant[1],170,55,85,25)

GUISetState(@SW_SHOW)
While 1
        Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $button1
                        _Baisse($check,$ant,$Label,$base,0)
                Case $button2
                        _Baisse($check,$ant,$Label,$base,1)
        EndSwitch
WEnd

Func _IsChecked($control)
        Return BitAND(GUICtrlRead($control),$GUI_CHECKED)=$GUI_CHECKED
EndFunc

Func _Baisse($check,$ant,$Label,$base,$i)
        If _IsChecked($check[$i]) Then
                $ant[$i] = $ant[$i]-Random(1,5,1)
        Else
                $ant[$i] = $ant[$i]-Random(6,10,1)
        EndIf
        GUICtrlSetData($Label[$i],"Base " & $i+1 & " : " & $base[$i] & @CRLF & "Après baisse : " & $Ant[$i])
EndFunc
J'aimerai qu'en appuyant sur mon bouton une deuxième fois, la valeur soit de $ant(precedent)-baisse et non de $base-baisse. je sais pas si je suis très clair mais si quelqu'un à une idée, vous êtes les bienvenus. En attendant, merci pour votre aide !

Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11430
Enregistré le : ven. 20 juil. 2007 20:00
Localisation : Bordeaux
Status : Hors ligne

Re: Retrouver une variable depuis une fonction

#2

Message par Tlem » mar. 04 juin 2019 14:12

Votre calcul étant tributaire de $base[0] ou $base[1], vous devez mettre à jour ces valeurs dans votre fonction _Baisse() ou à la suite de l'appel de fonction dans les Case.

Par contre il y a moyen de simplifier le code, parce que là dur dur avec toutes ces variables tableau qui ne servent qu'une fois ...
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".

littlechiki
Niveau 3
Niveau 3
Messages : 37
Enregistré le : sam. 13 avr. 2019 12:58
Status : Hors ligne

Re: Retrouver une variable depuis une fonction

#3

Message par littlechiki » mar. 04 juin 2019 15:31

Mon code de base contient des variables tableau qui servent bien plus mais là c'était juste un exemple. Ah mince parce que dans mon vrai code, le $base est nécessaire à la bonne exécution du code. de plus ce que je ne comprend pas, c'est que en retirant toutes mes variables $base, le problème subsiste.

Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11430
Enregistré le : ven. 20 juil. 2007 20:00
Localisation : Bordeaux
Status : Hors ligne

Re: Retrouver une variable depuis une fonction

#4

Message par Tlem » mar. 04 juin 2019 17:34

Ben, dans ce cas, inversez les choses.
Utilisez $base comme valeur de base (au lieu de $Ant) et lors de l'appel de fonction utilisez $Ant au lieu de $Base.

De plus, vu le nom et la la portée de vos variables, vous pourriez simplifier dans le genre :

Code : Tout sélectionner

While 1
        Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $button1
                        _Baisse(0)
                Case $button2
                        _Baisse(1)
        EndSwitch
WEnd

Func _IsChecked($control)
        Return BitAND(GUICtrlRead($control),$GUI_CHECKED)=$GUI_CHECKED
EndFunc

Func _Baisse($i)
        If _IsChecked($check[$i]) Then
                $ant[$i] = $ant[$i]-Random(1,5,1)
        Else
                $ant[$i] = $ant[$i]-Random(6,10,1)
        EndIf
        GUICtrlSetData($Label[$i],"Base " & $i+1 & " : " & $base[$i] & @CRLF & "Après baisse : " & $Ant[$i])
EndFunc
Ce qui devrait résoudre une partie de votre problème. ^^
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".

littlechiki
Niveau 3
Niveau 3
Messages : 37
Enregistré le : sam. 13 avr. 2019 12:58
Status : Hors ligne

Re: Retrouver une variable depuis une fonction  

#5

Message par littlechiki » mar. 04 juin 2019 18:50

En effet, de cette façon ça marche. d'ailleurs, même si je déplace ma fonction dans un autre fichier, ça me marque des erreurs partout mais ça marche. Merci pour ça ! ça m'a corrigé toute la majeure partie du problème que j'avais !

Répondre