Page 1 sur 1

[R] Stocker une donnée pour chaque item d'un combo

Posté : lun. 26 mai 2008 15:19
par CleM71
Bonjour,

Au lancement de mon application, un combo se remplit de valeurs dont l'affichage est utile à la compréhension de l'utilsateur (le nom d'un fichier par exemple).

Mon traitement, lui, n'a que faire de ce nom de fichier, mais désire connaître son chemin absolu ...

Comment faire, avec un Combo box, pour afficher une donnée dans un item, et en stocker une différente de manière invisible ?

A l'époque où je développais en Visual Basic, la propriété "value" d'un item complétait généreusement la propriété "text" ou "caption".

Peut-on en faire de même en AutoIt ?

En vous remerciant.

Re: [..] Stocker une donnée pour chaque item d'un combo

Posté : mer. 28 mai 2008 08:47
par CleM71
Bonjour,

Pas de solution à me proposer ? :-(

Re: [..] Stocker une donnée pour chaque item d'un combo

Posté : mer. 28 mai 2008 11:25
par Voodoo
La méthode simple qui me vient à l'esprit est de faire un tableau à 2 dimensions. Le nom dans la premiére colonne et le chemin dans l'autre.

Quand tu as besoins du chemin, tu récupères le nom dans le combobox et tu le cherches dans ton tableau pour avoir l'indice. Tu auras le chemin.

Il y a peut étre moyen de faire mieux mais c'est une méthode :D

Re: [..] Stocker une donnée pour chaque item d'un combo

Posté : jeu. 29 mai 2008 17:24
par CleM71
Merci pour ta réponse.

C'est exactement ce sur quoi je me suis dirigé.

Pour récupérer l'index de l'élément sélectionné, il faut utiliser les librairies UDF des Combobox. J'ai donc migré vers ce composant, avec notamment le _GUICtrlComboboxEx_Create().

La méthode AddString est censée ajouter un élément au Combo box, et ce n'est pas le cas chez moi, du moins je ne le vois pas ! Le combo reste désespérément vide.

J'ai essayé même de copier / coller les scripts d'exemple fournis avec AutoIt. Si je l'exécute dans un nouveau programme, avec une GUI dédiée à ce test, ça marche. Dès que j'implémente la création d'items dans ma GUI, je ne vois rien dans le combo.

Inclusion du composant :

Code : Tout sélectionner

#Include <GuiComboBoxEx.au3>
 
Création de la GUI :

Code : Tout sélectionner

$Win = GUICreate("ALIAS 1.0", 322, 526, 326, 197)
 
Création du combo :

Code : Tout sélectionner

$LstMSI = _GUICtrlComboBoxEx_Create($Win, "", 7, 112, 305, 25)
 
Pour stocker dans un tableau mon information, j'utilise une variable $i incrémentée à chaque ajout d'un item dans le combo.
Voici ma fonction récursive, qui doit ajouter un item dans le combo par fichier MSI trouvé à partir du répertoire avec lequel elle est lancée à l'origine :

Code : Tout sélectionner

Func ScanFolderForMSI($SourceFolder)
    Local $Search
    Local $File
    Local $FileAttributes
    Local $FullFilePath
        
    $Search = FileFindFirstFile($SourceFolder & "\*.*")
    While 1
        If $Search = -1 Then
            ExitLoop
        EndIf
        $File = FileFindNextFile($Search)
        If @error Then ExitLoop
        $FullFilePath = $SourceFolder & "\" & $File
        $FileAttributes = FileGetAttrib($FullFilePath)
        If StringInStr(StringRight ($File, 4), ".msi") Then
            _GUICtrlComboBoxEx_AddString($LstMSI, $FullFilePath)
            $i = $i  + 1
            $TabMSI[$i] = $FullFilePath
        EndIf
        If StringInStr($FileAttributes,"D") Then
            ScanFolderForMSI($FullFilePath)
        EndIf
    WEnd
    FileClose($Search)
EndFunc
 

Plus incroyable, si je fais

Code : Tout sélectionner

MsgBox(0, "", _GUICtrlComboBoxEx_AddString($LstMSI, $FullFilePath))
 
ça me renvoie bien l'index de l'item qui vient d'être ajouté !

Donc voilà, si vous avez des idées, je suis preneur :-)

Merciii

Re: [..] Stocker une donnée pour chaque item d'un combo

Posté : ven. 30 mai 2008 10:06
par CleM71
Résolu

La hauteur de mon combo (25) était insuffisante ...