Page 1 sur 1

[...] Variable dans Input et Tooltip

Posté : jeu. 07 janv. 2010 17:05
par darkmaka
Bonjour.

Je n'arrive pas à définir une variable pour GuiCtrlCreateInput() afin que lorsque j'entre un nom dedans, il soit repris partout.

Par exemple si je veux l'afficher dans la tooltip j'ai fait:

Code : Tout sélectionner

$name1 = GuiCtrlCreateInput("", 270, 55, 110, 20)
$val_nm1 = GUICtrlCreateButton("Valider", 285, 77, 75, 30)

    GUISetState()

    While 1
        $msg = GUIGetMsg()

ToolTip("Personne Affichée : "& $less_ap,0,0)

        Select
            Case $msg = $val_nm1
                $name_j1 = $name1
        EndSelect

        If $Total_1 > $Total_2 Then
            $less_ap = $name_j1
        Else
            $less_ap = $Total_1
        EndIf
 
Voilà donc mon soucis.

J'ai joint le code actuel pour plus de détails.

Merci et bonne journée :)

Re: [...] Variable dans Input et Tooltip

Posté : jeu. 07 janv. 2010 17:29
par Habibsbib
Ca devrait marcher. Je n'ai pas essayé, je n'ai pas eu le temps.

Code : Tout sélectionner

$name1 = GuiCtrlCreateInput("", 270, 55, 110, 20)
$val_nm1 = GUICtrlCreateButton("Valider", 285, 77, 75, 30)
GUISetState()

While 1
$msg = GUIGetMsg()
ToolTip("Personne Affichée : "& $less_ap,0,0)
$name1 = GUICtrlRead($name1)

        If $msg = $val_nm1 Then
            $name_j1 = $name1
        EndIf

        If $Total_1 > $Total_2 Then
            $less_ap = $name_j1
        Else
            $less_ap = $Total_1
        EndIf
        
WEnd
 

Re: [...] Variable dans Input et Tooltip

Posté : jeu. 07 janv. 2010 17:42
par darkmaka
Ca n'a pas fonctionné.
Par contre quand je fait:

Code : Tout sélectionner

        If $msg = $val_nm1 Then
            $name1 = GUICtrlRead($name1)
        EndIf
Ça fonctionne.

Tant que je suis là, j'aime faire une condition "Si le Total est inférieur aux autres Alors ..."
Comme je l'ai fait ici

Code : Tout sélectionner

        If $Total_1 > $Total_2 Then
Mais pour les 4 autres $Total_ en même temps

Edit:
Je viens de trouver un problème.
Si par erreur je clic 2 fois sur le boutons "Valider" au lieu du nom affiché j'ai un 0

Et pour ma question précédente, j'ai essayé de faire :

Code : Tout sélectionner

        If $Total_1 > $Total_2 Then
            $less_ap = $name1
        ElseIf $Total_1 > $Total_3 Then
            $less_ap = $name1
        ElseIf $Total_1 > $Total_4 Then
            $less_ap = $name1
        ElseIf $Total_1 > $Total_5 Then
            $less_ap = $name1
        ElseIf $Total_1 > $Total_6 Then
            $less_ap = $name1
        EndIf

        If $Total_2 > $Total_1 Then
            $less_ap = $name2
        ElseIf $Total_2 > $Total_3 Then
            $less_ap = $name2
        ElseIf $Total_2 > $Total_4 Then
            $less_ap = $name2
        ElseIf $Total_2 > $Total_5 Then
            $less_ap = $name2
        ElseIf $Total_2 > $Total_6 Then
            $less_ap = $name2
        EndIf

        If $Total_3 > $Total_2 Then
            $less_ap = $name3
        ElseIf $Total_3 > $Total_1 Then
            $less_ap = $name3
        ElseIf $Total_3 > $Total_4 Then
            $less_ap = $name3
        ElseIf $Total_3 > $Total_5 Then
            $less_ap = $name3
        ElseIf $Total_3 > $Total_6 Then
            $less_ap = $name3
        EndIf

        If $Total_4 > $Total_2 Then
            $less_ap = $name4
        ElseIf $Total_4 > $Total_3 Then
            $less_ap = $name4
        ElseIf $Total_4 > $Total_1 Then
            $less_ap = $name4
        ElseIf $Total_4 > $Total_5 Then
            $less_ap = $name4
        ElseIf $Total_4 > $Total_6 Then
            $less_ap = $name4
        EndIf

        If $Total_5 > $Total_2 Then
            $less_ap = $name5
        ElseIf $Total_5 > $Total_3 Then
            $less_ap = $name5
        ElseIf $Total_5 > $Total_4 Then
            $less_ap = $name5
        ElseIf $Total_5 > $Total_1 Then
            $less_ap = $name5
        ElseIf $Total_5 > $Total_6 Then
            $less_ap = $name5
        EndIf

        If $Total_6 > $Total_2 Then
            $less_ap = $name6
        ElseIf $Total_6 > $Total_3 Then
            $less_ap = $name6
        ElseIf $Total_6 > $Total_4 Then
            $less_ap = $name6
        ElseIf $Total_6 > $Total_5 Then
            $less_ap = $name6
        ElseIf $Total_6 > $Total_1 Then
            $less_ap = $name6
        EndIf
Mais ça fonctionne très mal :s

Re: [...] Variable dans Input et Tooltip

Posté : ven. 08 janv. 2010 10:01
par Habibsbib
Effectivement, j'ai mal stocké la variable.

Désolé.

Re: [...] Variable dans Input et Tooltip

Posté : ven. 08 janv. 2010 17:15
par SagePourpre
Quelques trucs pour un code plus net.

Code : Tout sélectionner

$Total_1 = $Total_1 + 9600
peut être remplacé par :

Code : Tout sélectionner

$Total_1 += 9600

Code : Tout sélectionner

        $Total_1 = $Total_1 + 2400
    $results = $Total_1
    GUICtrlSetData($output1, $results)
La deuxième ligne pourrait très bien être supprimée pour faire ceci :

Code : Tout sélectionner

        $Total_1 = $Total_1 + 2400
    GUICtrlSetData($output1, $Total_1)

Mais sinon, en gros, tout ce qui se répète plusieurs fois dans ton script peut facilement être
transformé en fonction.


Comme par exemple, ceci :

Code : Tout sélectionner

Case $msg = $crown_inf1
$Total_1 = $Total_1 + 2400
$results = $Total_1
GUICtrlSetData($output1, $results)
Dans le script que tu as attaché à ton premier message, les 3 dernières lignes sont identiques 16 fois.

Tu pourrais aisément créer une fonction pour ça :

Code : Tout sélectionner

Case $msg = $crown_inf1
total(2400)
 
et ta fonction "total"

Code : Tout sélectionner

Func total($nombre)
    $total_1+=$nombre
    GUICtrlSetData($output1,$total_1)
EndFunc
 
En plus de diminuer le nombre de ligne, il est beaucoup moins long de modifier ta fonction que de modifier 16
fois les lignes de codes qui se répètent...


Voilà, t'en fais ce que tu en veux. :)

Re: [...] Variable dans Input et Tooltip

Posté : sam. 09 janv. 2010 00:41
par darkmaka
Merci beaucoup, ça m'a fait gagné énormément de lignes.

Je n'arrive toujours pas à résoudre mes problèmes précédent :s

Re: [...] Variable dans Input et Tooltip

Posté : sam. 09 janv. 2010 02:04
par matwachich
J'avoue n'avoir que survoler ce topic mais, faudrait pas par hasard utiliser un GuiCtrlRead($ton_input) pour afficher ce qu'il contient (nb: ton input)?

Re: [...] Variable dans Input et Tooltip

Posté : sam. 09 janv. 2010 09:43
par SagePourpre
Je ne suis pas certain d'avoir compris ton problème...

En gros, tu veux que ce que tu tapes dans le input soit repris dans le tooltip ?

En remplaçant

Code : Tout sélectionner

ToolTip("Personne Affichée : "& $less_ap,0,0)

        Select
            Case $msg = $val_nm1
                [b]$name_j1 = $name1[/b]
        EndSelect

par

Code : Tout sélectionner

ToolTip("Personne Affichée : "& $less_ap,0,0)

        Select
            Case $msg = $val_nm1
                [b]$name_j1 = GUICtrlRead($name1)[/b]
        EndSelect
ça fonctionne sans problème, même si tu pèse 40 fois sur "Valider"






Sinon, pour la longue partie de ton script qui fonctionne mal, ponctuée de if... then, tu auras avantage
à gérer tout ça dans un tableau.
Exemple :

Code : Tout sélectionner

#include<array.au3>



; valeurs quelconques pour les $total afin de démontrer l'exemple
$Total1 = 11
$Total2 = 12
$Total3 = 31
$Total4 = 14
$Total5 = 15
$Total6 = 31


Dim $Totaux[7] ; création du tableau pour stocker les 6 totaux

For $i = 1 To 6 ;
    $Totaux[$i] = Eval("Total" & $i) ; on place dans le tableau les valeurs correspondantes.
Next

;_ArrayDisplay($Totaux)  ; juste pour voir le résultat (à être enlever dans code final)
$max = _ArrayMax($Totaux)  ; on trouve la valeur la plus haute
$maxindex = _ArrayFindAll($Totaux,$max) ; trouve les plus hauts résultats et nous donne l'index
;_ArrayDisplay($maxindex) ; pour démonstration du résultat final
$maxindex = _ArrayToString($maxindex,",")
$resultats_affiches_n_importe_ou = "Score : " & $max & " ( Joueur " & $maxindex & " ) "
ToolTip($resultats_affiches_n_importe_ou,0,0)
Sleep(5000)
Ce que j'ai fait en gros, si les commentaires dans l'exemple ne sont pas suffisants, c'est
de prendre tes 6 totaux, de les mettre dans un tableau correspondant.
(la valeur de $total1 prend l'index 1 de mon tableau $totaux et ainsi de suite )

Ensuite, _arraymax permet de déterminer la valeur la plus haute du tableau ( mais pas son index )
Je stocke cette variable dans $max.

_arrayfindall me permet de trouver tous les index (joueurs) qui ont le score maximal trouvé, c'est-à-dire
31 dans cet exemple.

_arraytostring me permet de mettre les numéros de joueurs ayant le plus haut score sous une forme de
"string" pour une utilisation facile pour l'affichage après.

Re: [...] Variable dans Input et Tooltip

Posté : sam. 09 janv. 2010 14:18
par darkmaka
J'ai fait:
Case $msg = $val_nm1
$name_j1 = GUICtrlRead($name1)
$die1 = GUICtrlCreateLabel("" & $name_j1, 10, 425, 70, 20, 0x1000)
Ça fonctionne parfaitement.

Par contre pour l'affichage des valeur j'ai un problème.
Déjà, c'est le mini que je veux. Donc j'ai passé tous les max en min.
Il m'affiche en permanence "Joueur 0" comme ayant le plus petit score.
Effectivement, en affichant le tableau [0] est vide et ça ne commence qu'à partir de [1].
Donc pour les test j'ai tout remis sur max.

Dans l'exemple ça fonctionne.
Par contre quand je le met dans ma fonction _Main() il m'affiche en permanence "Score: (Joueur 0,1,2,3,4,5,6)".
J'ai donc essayé ceci:

Code : Tout sélectionner

    $Total_j1 = GUICtrlRead($Total_1)
    $Total_j2 = GUICtrlRead($Total_2)
    $Total_j3 = GUICtrlRead($Total_3)
    $Total_j4 = GUICtrlRead($Total_4)
    $Total_j5 = GUICtrlRead($Total_5)
    $Total_j6 = GUICtrlRead($Total_6)


    Dim $Totaux[7] ; création du tableau pour stocker les 6 totaux

    For $i = 1 To 6 ;
        $Totaux[$i] = Eval("Total" & $i) ; on place dans le tableau les valeurs correspondantes.
    Next

    $min = _ArrayMin($Totaux)  ; on trouve la valeur la plus haute
    $minindex = _ArrayFindAll($Totaux,$min) ; trouve les plus hauts résultats et nous donne l'index
    $minindex = _ArrayToString($minindex,",")
    $less_ap = "Score : " & $min & " ( Joueur " & $minindex & " ) "

        ToolTip($less_ap,0,0)
Je re-joins le fichier dans l'état où il est actuellement.

Merci encore et bonne journée :)

Re: [...] Variable dans Input et Tooltip

Posté : sam. 09 janv. 2010 21:05
par SagePourpre
Bon, je regarde actuellement ton code et je n'arrive pas à voir ce qui cloche (peut-être trouverai-je en cours
de message ).

Lorsque tu fais quelque chose qui se répète, comme ton interface ou chaque joueur à son propre "tab" et tous
les contrôles sont placés de manières identique, tu peux aisément utiliser une boucle.


Regarde cet exemple :
► Afficher le texte
Au lieu d'une section de cette longueur pour chaque joueur. En plus, comme dans "assign" nous déclarons
les variables ( globalement dans ce cas particulier ), on a plus besoin de toutes les déclarées auparavant.

La seule différence est que puisque je crée les variable en utilisant "assign", il faudra utiliser "eval" pour lire
ces mêmes variables.

Voilà !
Calculateur_AP.au3
(7.58 Kio) Téléchargé 82 fois

de 889 lignes à 259 ( Le poids du fichier témoigne de cet ajustement ).
C'est beaucoup plus facile de se repérer et d'apporter des changements ainsi...
J'ai corrigé quelques erreurs ( variables inutilisées, GuiCtrlCreate au lieu de GuiCtrlSetData, etc... )

Pour ce qui est du problème avec le tooltip, il était la conséquence d'une erreur.
Tu avais modifié le nom de certaines variables en omettant de modifier toutes les instances.

Re: [...] Variable dans Input et Tooltip

Posté : dim. 10 janv. 2010 13:03
par darkmaka
Ah bein parfait.

Vraiment, Meci beaucoup :)

Re: [...] Variable dans Input et Tooltip

Posté : lun. 11 janv. 2010 10:06
par Habibsbib
Balise [R] si résolu, et c'est deux points et pas trois dans la balise.

Enjoy.