[R] Comment transférer variable entre 2 GUI

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Kisskool
Niveau 1
Niveau 1
Messages : 9
Enregistré le : jeu. 09 sept. 2010 22:39
Status : Hors ligne

[R] Comment transférer variable entre 2 GUI

#1

Message par Kisskool »

Bonjours a tous !
Alors voilà je viens sur ce forum car j'ai besoin d'aide...j'essaye de crée un programme pour aider les joueurs d'un jeu ( Pas un bot ), il effectuera des calculs etc...
Mais un problème se pose...
J'explique en détails :

Une fenêtre s'ouvre, l'utilisateur voit afficher a l'écran
Nombre de points : 0
Il clic sur le bouton modifier se trouvant juste à coté.Une nouvelle page s'ouvre, plus exactement une inputbox où on vous demande le nombre de points. Vous inscrivez 56845 ( exemple ),clic sur OK, mais la...Nombre de points n'a pas bouger, ce qui est normal car la GUI n'a pas était rechargé ( je présume ).
Mais je ne sais pas comment l'actualiser, ou la fermer pour la réouvrir etc...

Code : Tout sélectionner

Func Button1_433()
Opt("GUIOnEventMode", 1)  ; Passe en mode événement
$secondwindow = GUICreate("Football M. Prog 1.0 - Modification d'un joueur", 550, 300)
GUICtrlCreateLabel("Ici vous pourrez changé les caractéristiques des joueurs pour obtenirs des détails/aides", 60, 10)
GUICtrlCreateLabel("Force : " & $force, 30, 50)
$forcebutton = GUICtrlCreateButton("Modifier", 90, 45)
GUICtrlCreateLabel($force, 200, 150)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSE")
GUICtrlSetOnEvent($forcebutton, "FORCEmodif")
GUISetState(@SW_SHOW)
EndFunc

Func FORCEmodif()
    $force = InputBox( "Force", " Veuillez entrée le nombre de points de force que possède votre joueur" )
EndFunc
J'ai supprimer un morceau du code donc c'est possible qu'il manque une commande...
Donc je demande votre aide car j'ai essayé de la désactivé/réactiver, cacher/montrer, je ne sais pas comment faire...

Merci d'avance
Modifié en dernier par Kisskool le lun. 13 sept. 2010 07:24, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Comment transférer variable entre 2 GUI

#2

Message par Tlem »

C'est l'élément Nombre de points qu'il vous faut actualiser et non la GUI. ;)

Lorsque vous créez votre GUI, vous placez sur celle-ci des éléments.
Chaque éléments se voit identifié par un 'ControlID'.
Par exemple dans la ligne de code :

Code : Tout sélectionner

$Force = GUICtrlCreateLabel("Force : " & $force, 30, 50)
la variable $Force contiendra le 'ControlID' de votre label.

Ensuite, à l'endroit qu'il vous convient dans le code, vous pouvez mettre à jour ce label (changer le texte) par la simple commande :

Code : Tout sélectionner

GUICtrlSetData($Force, "Nouveau texte du label")
Voilà, c'est aussi simple que ca. ;)
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é".
Kisskool
Niveau 1
Niveau 1
Messages : 9
Enregistré le : jeu. 09 sept. 2010 22:39
Status : Hors ligne

Re: [..] Comment transférer variable entre 2 GUI

#3

Message par Kisskool »

Ah d'accord je vois, merci beaucoup =D
Mais j'ai toujours un tout petit problème

Code : Tout sélectionner

Func Button1_433()
Opt("GUIOnEventMode", 1)  ; Passe en mode événement
$secondwindow = GUICreate("Football M. Prog 1.0 - Modification d'un joueur", 550, 300)
GUICtrlCreateLabel("Ici vous pourrez changé les caractéristiques des joueurs pour obtenirs des détails/aides", 60, 10)
GUICtrlCreateLabel("Force : " & $force, 30, 50)
$forcebutton = GUICtrlCreateButton("Modifier", 90, 45)
GUICtrlCreateLabel($force, 200, 150)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSE")
GUICtrlSetOnEvent($forcebutton, "FORCEmodif")
GUISetState(@SW_SHOW)
EndFunc

Func FORCEmodif()
    $force = InputBox( "Force", " Veuillez entrée le nombre de points de force que possède votre joueur" )
GUICtrlSetData($force, "Nouveau texte du label")
EndFunc
Quand je place cette ligne, rien ne se passe...Pourquoi ?
Encore merci de votre rapidité et de vos claireté
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Comment transférer variable entre 2 GUI

#4

Message par Tlem »

Hummm :shock:

Vous devriez relire avec attention mon message ...
$Force doit être un ControlID et non du texte ...
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é".
Avatar du membre
20100
Niveau 3
Niveau 3
Messages : 43
Enregistré le : ven. 03 juil. 2009 11:39
Status : Hors ligne

Re: [..] Comment transférer variable entre 2 GUI

#5

Message par 20100 »

... en comprenant ce qu'est la portée des variables (Local, Global...)

Si on souhaite partager une variable dans un programme AutoIt, au sein de l'ensemble des fonctions qui compose un script, il suffit de la déclarer en Global. On parle de portée d'une variable au sens où la durée de vie de la variable dépend de son contexte : par exemple dans le code ci-dessous maVariableLocal n'est accesibble que dans la fonction test(), si j'essaye de l'utiliser à l'exterieur j'obtiendrais une erreur, ce qui n'est pas le cas de la variable Global qui sera utilisée dans n'importe quel fonction de ton script AutoIt.

Code : Tout sélectionner

Global $maVariableGlobal = 5 ;

Func test() 
    Local maVariableLocal = 3;
        ConsoleWrite("$maVariableGlobal = "&$maVariableGlobal&@CRLF)
    ConsoleWrite("$maVariableLocal = "&$maVariableLocal &@CRLF)
EndFunc
On pourra utiliser les variables Global, pour déclarer des constantes de notre script. On fait un nouveau fichier constantes.au3 qu'il suffira d'inclure dans nos autre script où l'on aura besoin de ces constantes.

Code : Tout sélectionner

#include-once
#cs ----------------------------------------------------------------------------
 AutoIt Version : 3.2.12.1
 Script         : Constantes utilisées pour notre application
#ce ----------------------------------------------------------------------------

; Declaration des variables
Global $nom_application = "blabla"
Global $version_application = "0.1"
Global $annee = 2008
Global $chemin_images = @WorkingDir&"\images\"
Une petite astuce pour être sur de ne pas oublier de déclarer des variables dans son script, il suffit de changer la valeur de l'option 'MustDeclareVars' à 1 de la manière suivante :

Code : Tout sélectionner

; Les variables doivent toutes être prédéclarés avant d'être utilisé sous peine d'erreur levée
Opt('MustDeclareVars', 1)
Bref tout ca pour dire

Code : Tout sélectionner

Func FORCEmodif()
    [color=#0000FF][b]Global[/b][/color] $force = InputBox( "Force", " Veuillez entrée le nombre de points de force que possède votre joueur" )
EndFunc
:wink:
Kisskool
Niveau 1
Niveau 1
Messages : 9
Enregistré le : jeu. 09 sept. 2010 22:39
Status : Hors ligne

Re: [..] Comment transférer variable entre 2 GUI

#6

Message par Kisskool »

Bonjours, je te remercie de ta réponse, mais malheureusement ce n'est pas ça, je penche pour la solution de Tlem mais je ne peut pas la tester aujourd'hui je ne suis que de passage...
J'ai déjà déclarer mes variables au début du script, je vous ai montré qu'un "morceau" du script, plus exactement la partie qui bug, mais quand même d'avoir essayé de m'aider :D
Je vous tiens au courant
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Comment transférer variable entre 2 GUI

#7

Message par Tlem »

Je viens de relire avec un petit peut plus d'attention votre dernière question (et celle du début).

Dans votre code, vous voulez changer le texte d'un InputBox, or celui-ci n'est pas un contrôle comme les autres, il ne renvoi pas de ContolID (il faut lire la documentation). Donc, de manière simple, cela n'est pas possible et d'ailleurs ne présente aucun intérêt.
Une InputBox est une boite de dialogue système. Quel serait l'intérêt de changer le texte que l'on vient d'attribuer à cette boite de dialogue. :shock:
Dans votre première question, il m'avait semblé que vous cherchiez à modifier le texte du GUICtrlCreateLabel.

Essayez d'être plus clair sur le comportement de votre script afin que l'on puisse vous proposer des solutions.
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é".
Avatar du membre
jl56
Niveau 7
Niveau 7
Messages : 415
Enregistré le : mer. 24 oct. 2007 22:42
Localisation : 56000
Status : Hors ligne

Re: [..] Comment transférer variable entre 2 GUI

#8

Message par jl56 »

Bonjour

Effectivement vos explications ne facilitent pas notre aide
enfin je pense avoir compris votre demande ,de fait thierry vous a donné toutes les infos. ci-dessous votre code modifié

Code : Tout sélectionner

Func Button1_433()
Opt("GUIOnEventMode", 1)  ; Passe en mode événement
$secondwindow = GUICreate("Football M. Prog 1.0 - Modification d'un joueur", 550, 300)
GUICtrlCreateLabel("Ici vous pourrez changé les caractéristiques des joueurs pour obtenirs des détails/aides", 60, 10)
GUICtrlCreateLabel("Force : " & $force, 30, 50)
$forcebutton = GUICtrlCreateButton("Modifier", 90, 45)
$labelforce=GUICtrlCreateLabel($force, 200, 150)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSE")
GUICtrlSetOnEvent($forcebutton, "FORCEmodif")
GUISetState(@SW_SHOW)
EndFunc

Func FORCEmodif()
    $force = InputBox( "Force", " Veuillez entrée le nombre de points de force que possède votre joueur" )
GUICtrlSetData($labeforce, "Nouveau texte du label force = "&$force)
EndFunc
vous n'avez pas utilisé de variable pour récupérer le controlID du label

Code : Tout sélectionner

$labelforce=GUICtrlCreateLabel($force, 200, 150)
ici le controlID se trouve dans $labelforce

afin de pouvoir la modifier, par la variable $force (valeur retourné par votre inputbox), modifier la ligne

Code : Tout sélectionner

GUICtrlSetData($labeforce, "Nouveau texte du label force = "&$force)
et la je modifie le label du controlID

j'espère que c'est cela que vous voulez

Perso pour afficher des valeurs je préfère un champ input.
Remplacez la ligne =$labeforce... par

Code : Tout sélectionner

$input_force=GUICtrlCreateInput("Force : " & $force, 30, 50,100,20)
et la ligne GUICtrlSetData($labeforce.... par

Code : Tout sélectionner

GUICtrlSetData($input_force,$force)
GUICtrlCreateInput permet aussi la lecture de son contenu par GUICtrlRead(....
c'est même son intéret, vous pourriez donc ainsi vous passez de votre inputbox

A+ JL56
Kisskool
Niveau 1
Niveau 1
Messages : 9
Enregistré le : jeu. 09 sept. 2010 22:39
Status : Hors ligne

Re: [..] Comment transférer variable entre 2 GUI

#9

Message par Kisskool »

Résolu ! JL56 avait raison, tout marche.
A faire attention, il peut y avoir un problème de taille du label ( manquer des lettres etc... ). Il suffit de lui indiquer sa taille.

Voici l'état final de mon script

Code : Tout sélectionner

Func Button1_433()
Opt("GUIOnEventMode", 1)  ; Passe en mode événement
$secondwindow = GUICreate("Football M. Prog 1.0 - Modification d'un joueur", 550, 300)
GUICtrlCreateLabel("Ici vous pourrez changé les caractéristiques des joueurs pour obtenirs des détails/aides", 60, 10)
$forcebutton = GUICtrlCreateButton("Modifier", 90, 45)
$labelforce=GUICtrlCreateLabel("Force : " & $force, 30, 50, 150, 150)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSE")
GUICtrlSetOnEvent($forcebutton, "FORCEmodif")
GUISetState(@SW_SHOW)
EndFunc

Func FORCEmodif()
    $force = InputBox( "Force", " Veuillez entrée le nombre de points de force que possède votre joueur" )
GUICtrlSetData( $labelforce, "Force : " & $force)
EndFunc
Merci beaucoup !
Répondre