[...] Variable dans Input et Tooltip

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
darkmaka
Niveau 1
Niveau 1
Messages : 5
Enregistré le : mer. 30 sept. 2009 19:10
Status : Hors ligne

[...] Variable dans Input et Tooltip

#1

Message 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 :)
Fichiers joints
Calculateur.au3
(9.96 Kio) Téléchargé 66 fois
Habibsbib
Niveau 7
Niveau 7
Messages : 393
Enregistré le : dim. 30 août 2009 13:49
Localisation : Euh...Verticale, entre le siège et l'écran...
Status : Hors ligne

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

#2

Message 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
 
Modifié en dernier par Habibsbib le ven. 08 janv. 2010 11:44, modifié 1 fois.
darkmaka
Niveau 1
Niveau 1
Messages : 5
Enregistré le : mer. 30 sept. 2009 19:10
Status : Hors ligne

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

#3

Message 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
Modifié en dernier par darkmaka le ven. 08 janv. 2010 11:10, modifié 1 fois.
Habibsbib
Niveau 7
Niveau 7
Messages : 393
Enregistré le : dim. 30 août 2009 13:49
Localisation : Euh...Verticale, entre le siège et l'écran...
Status : Hors ligne

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

#4

Message par Habibsbib »

Effectivement, j'ai mal stocké la variable.

Désolé.
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

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

#5

Message 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. :)
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
darkmaka
Niveau 1
Niveau 1
Messages : 5
Enregistré le : mer. 30 sept. 2009 19:10
Status : Hors ligne

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

#6

Message 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
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

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

#7

Message 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)?
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

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

#8

Message 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.
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
darkmaka
Niveau 1
Niveau 1
Messages : 5
Enregistré le : mer. 30 sept. 2009 19:10
Status : Hors ligne

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

#9

Message 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 :)
Fichiers joints
Calculateur_AP.au3
(30.14 Kio) Téléchargé 65 fois
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

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

#10

Message 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.
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
darkmaka
Niveau 1
Niveau 1
Messages : 5
Enregistré le : mer. 30 sept. 2009 19:10
Status : Hors ligne

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

#11

Message par darkmaka »

Ah bein parfait.

Vraiment, Meci beaucoup :)
Habibsbib
Niveau 7
Niveau 7
Messages : 393
Enregistré le : dim. 30 août 2009 13:49
Localisation : Euh...Verticale, entre le siège et l'écran...
Status : Hors ligne

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

#12

Message par Habibsbib »

Balise [R] si résolu, et c'est deux points et pas trois dans la balise.

Enjoy.
Répondre