[R] Lister un tableau 1D dans une liste déroulante

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

[R] Lister un tableau 1D dans une liste déroulante

#1

Message par Laddy »

Bonjour
Je ne suis pas encore familière des tableaux en autoit. C'est mon tout premier.
j'ai un soucis sur un tableau 1D à afficher dans une liste déroulante, j'ai lu la documentation et j'ai tenté différentes choses je me retrouve toujours avec un ou deux éléments c'est tout au lieu des 62.
Pourquoi ?

Merci aux membres qui me répondront.

Laddy

Code : Tout sélectionner

#cs
Excercice sur le tableau 1D : Lister le contenu d'un tableau dans une liste déroulante.
CloneVDIManager Laddy - but listé dans la gui CreateVM une liste déroulante des Type OS et lancer la création en utilisant le résultat
Suite du sujet : http://www.autoitscript.fr/forum/viewtopic.php?f=3&t=6647 (Amélioration)
#ce

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=

Global $i, $OsType

Global $Form1 = GUICreate("Form1", 414, 152, 192, 124)
Global $ListOsType = GUICtrlCreateCombo("", 104, 40, 145, 25)
Global $Go = GUICtrlCreateButton("Go", 152, 96, 75, 25, $WS_GROUP)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

$OsType[62] = ["Other", "Windows31", "Windows95", "Windows98", "WindowsMe", _
            "WindowsNT4", "WindowsNT", "Windows2000", "Windows2003", "Windows2003_64", "Windows2008", "Windows2008_64", _
            "WindowsXP", "WindowsXP_64", "WindowsVista", "WindowsVista_64", "Windows7", "Windows7_64", _
            "Linux", "Linux22", "Linux24", "Linux24_64", "Linux26", "Linux26_64", "ArchLinux", "ArchLinux_64", "Debian", "Debian_64", "OpenSUSE", "OpenSUSE_64", _
            "Fedora", "Fedora_64", "Gentoo", "Gentoo_64", "Mandriva", "Mandriva_64", "RedHat", "RedHat_64", "Turbolinux", "Ubuntu", "Ubuntu_64", _
            "Xandros", "Xandros_64", "Solaris", "Solaris_64", "OpenSolaris", "OpenSolaris_64", _
            "FreeBSD", "FreeBSD_64", "OpenBSD", "OpenBSD_64", "NetBSD", "NetBSD_64", _
            "OS2Warp3", "OS2Warp4", "OS2Warp45", "OS2eCS", "OS2", _
            "DOS", "Netware", "L4", "QNX"]

[color=#008000];Je pense que mon soucis est ici dans le For. Pour chaque élément ($i) dans le tableau $OsType, Lire(GuiCtrlSetData) dans la liste déroulante ($ListOsType) les éléments ($i) dans le tableau ($OsType)[/color]
[color=#FF0000]For $i In $OsType
GUICtrlSetData($ListOsType, $OsType[$i])
Next[/color]

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $Go
            Go_List()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd



Func Go_List()
  local $Os = GuiCtrlRead($ListOsType) ; tout simplement
MsgBox(0, "Tableau 1D", $Os)
EndFunc   ;==>Go_List
Modifié en dernier par Laddy le jeu. 13 janv. 2011 16:39, modifié 1 fois.
Avatar du membre
poke123
Niveau 2
Niveau 2
Messages : 26
Enregistré le : mer. 24 mars 2010 14:22
Status : Hors ligne

Re: [..] Lister un tableau 1D dans une liste déroulante

#2

Message par poke123 »

tente (array.au3 requis) guictrlsetdata($combo, _arraytostring($array, "|"))
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [..] Lister un tableau 1D dans une liste déroulante

#3

Message par Laddy »

Bonjour
AH ben voila ça se complique toujours , j'ai inclue UDF et modifié maintenant tout est listé.
Me reste à faire fonctionner mon bouton maintenant et je vois pas comment l'utiliser :cry:

Code : Tout sélectionner

Func Go_List()
    For $i = 1 To $OsType
        [color=#FF0000]If $nMsg = $ListOsType[$i] Then[/color] ; je pense que c'est mon soucis
            MsgBox(0, "Tableau 1D", GUICtrlSetData($ListOsType, _ArrayToString($OsType, "|"), $OsType[0]))
        EndIf
    Next
EndFunc   ;==>Go_List

;C:\Documents and Settings\Caiine\Bureau\Autoit\Tableau_1D.au3 (43) : ==> Subscript used with non-Array variable.:
;If $nMsg = $ListOsType[$i] Then
;If $nMsg = $ListOsType^ ERROR
 
Merci
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Lister un tableau 1D dans une liste déroulante

#4

Message par jchd »

Code : Tout sélectionner

Func Go_List()
    For $i = 0 To Ubound($OsType) - 1
        If $nMsg = $ListOsType[$i] Then
            MsgBox(0, "Tableau 1D", GUICtrlSetData($ListOsType, _ArrayToString($OsType, "|"), $OsType[0]))
        EndIf
    Next
EndFunc   ;==>Go_List
 
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [..] Lister un tableau 1D dans une liste déroulante

#5

Message par Laddy »

Bonjour
j'ai testé et j'ai toujours le même soucis

Code : Tout sélectionner

C:\Documents and Settings\Laddy\Bureau\Autoit\Tableau_1D.au3 (41) : ==> Subscript used with non-Array variable.:
If $nMsg = $ListOsType[$i] Then
If $nMsg = $ListOsType^ ERROR
->15:55:50 AutoIT3.exe ended.rc:1
>Exit code: 1    Time: 3.962
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Lister un tableau 1D dans une liste déroulante

#6

Message par GaRydelaMer »

Bonjour

alors pour lire les données d'un contrôle, utilise GUICtrlRead().

Pour afficher des données dans un contrôle GUICtrlSetData().


Maintenant avec les ListBox:

pour ajouter des données dans le contôle GUIcrtrlSetDate($idListBox, "chaine séparer les valeurs par | ")

le GuiCtrlRead() te renverra la valeur sélectionner dans la liste.

Func Go()
local $Os = GuiCtrlRead($ListOsType) ; tout simplement
MsgBox(0, "Tableau 1D", $Os)
EndFunc

Maintenant que cela est acquis, pour en revenir a ton tableau, tu peux vouloir connaitre l'index du tableau de l'élément sélectionné dans la liste:
la on va utiliser les fonctions sur les tableaux local $Index = _ArraySearch($OSType, $Os) ici $Os = GuiCtrlRead($ListOsType).

Pour retenir tous ca, sache que tous les contrôle qui sont créer de facon standard, avec GuiCtrlCreate_xxx, te retourne seulement un ID (un entier), en gros un pointeur unique vers le contrôle en aucun cas un tableau.
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [..] Lister un tableau 1D dans une liste déroulante

#7

Message par Laddy »

Bonjour GaRydelaMer
En gros je me suis torturée la tête en pensant que c'était compliqué.
J'ai juste besoin dans ce cas de récupérer le nom et non l'index pour mon programme.
Bon je vais aller le compléter j'espère que ça ira :oops:
Merci pour l'explication je vais le mettre dans mon anti-sèche pour ne pas l'oublier.
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [R] Lister un tableau 1D dans une liste déroulante

#8

Message par GaRydelaMer »

Re,

j'espère seulement que tu as pas trop mal à la tête ;)
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [R] Lister un tableau 1D dans une liste déroulante

#9

Message par Laddy »

Oh que si !je suis malade en plus

En plus l'intégration ne se fait pas comme je le souhaite mon bouton Go ne fonctionne plus :(
Ah j'ai trouvé mais tiens bizzare que ça se déclenche maintenant.
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: [R] Lister un tableau 1D dans une liste déroulante

#10

Message par matwachich »

Le problème, c'est que tu utilise GuiCtrlSetData (Le mot clef est en rouge!!!)
Set, ca veut dire que ce qu'il y avait avant dans ton control sera écraser par ce que tu y met maintenant.

En plus, le $i dans ta boucle ne prend pas la valeur de l'index de l'élément, mais l'élément lui même.
Pour avoir l'index, et l'utiliser comme tu le fait (c'est à dire $OsType[$i]), il faut utiliser une boucle For To Next
Exemple:

Code : Tout sélectionner

For $i = 0 To Ubound($OsType) - 1
ConsoleWrite($OsType[$i] & @CRLF)
Next

; Comme tu le fait, ca devrait être:
For $i In $OsType
ConsoleWrite($i & @CRLF)
Next
 
Quand à ton problème, le mieux c'est de d'abord construire le string que va mettre dans ton combo, c'est à dire (comme le dit la doc) la liste des éléments séparés par |

Exemple:

Code : Tout sélectionner

#cs
Excercice sur le tableau 1D : Lister le contenu d'un tableau dans une liste déroulante.
CloneVDIManager Laddy - but listé dans la gui CreateVM une liste déroulante des Type OS et lancer la création en utilisant le résultat
Suite du sujet : viewtopic.php?f=3&t=6647 (Amélioration)
#ce

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=

Global $Form1 = GUICreate("Form1", 414, 152, 192, 124)
Global $ListOsType = GUICtrlCreateCombo("", 104, 40, 145, 25)
Global $Go = GUICtrlCreateButton("Go", 152, 96, 75, 25, $WS_GROUP)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

Dim $OsType[62] = ["Other", "Windows31", "Windows95", "Windows98", "WindowsMe", _
            "WindowsNT4", "WindowsNT", "Windows2000", "Windows2003", "Windows2003_64", "Windows2008", "Windows2008_64", _
            "WindowsXP", "WindowsXP_64", "WindowsVista", "WindowsVista_64", "Windows7", "Windows7_64", _
            "Linux", "Linux22", "Linux24", "Linux24_64", "Linux26", "Linux26_64", "ArchLinux", "ArchLinux_64", "Debian", "Debian_64", "OpenSUSE", "OpenSUSE_64", _
            "Fedora", "Fedora_64", "Gentoo", "Gentoo_64", "Mandriva", "Mandriva_64", "RedHat", "RedHat_64", "Turbolinux", "Ubuntu", "Ubuntu_64", _
            "Xandros", "Xandros_64", "Solaris", "Solaris_64", "OpenSolaris", "OpenSolaris_64", _
            "FreeBSD", "FreeBSD_64", "OpenBSD", "OpenBSD_64", "NetBSD", "NetBSD_64", _
            "OS2Warp3", "OS2Warp4", "OS2Warp45", "OS2eCS", "OS2", _
            "DOS", "Netware", "L4", "QNX"]

; On construit le string
Global $string = ""

For $i In $OsType
    $string &= $i & "|"
Next
$string = StringTrimRight($string, 1) ; c'est pour enlever le dernier |
ConsoleWrite($string & @CRLF)

GUICtrlSetData($ListOsType, $string)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $Go
            Go_List()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

Func Go_List()
    local $Os = GuiCtrlRead($ListOsType) ; tout simplement
    MsgBox(0, "Tableau 1D", $Os)
EndFunc   ;==>Go_List
 
PS: l'utilisation massive de ConsoleWrite est bénéfique pour la compréhension et la poursuite des erreurs qui se glissent dans un script!
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
Répondre