Page 1 sur 1

Retrouver une variable depuis une fonction

Posté : mar. 04 juin 2019 14:42
par littlechiki
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 !

Re: Retrouver une variable depuis une fonction

Posté : mar. 04 juin 2019 15:12
par Tlem
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 ...

Re: Retrouver une variable depuis une fonction

Posté : mar. 04 juin 2019 16:31
par littlechiki
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.

Re: Retrouver une variable depuis une fonction

Posté : mar. 04 juin 2019 18:34
par Tlem
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. ^^

Re: Retrouver une variable depuis une fonction  

Posté : mar. 04 juin 2019 19:50
par littlechiki
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 !