[R]Affichage dans listView

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Tespark
Niveau 2
Niveau 2
Messages : 24
Enregistré le : mar. 02 avr. 2019 07:55
Status : Hors ligne

[R]Affichage dans listView

#1

Message par Tespark » mar. 02 avr. 2019 08:14

Bonjour,

tout nouveau sur le forum je vous sollicite déjà !
J'essaye de me faire un outil pour mon travail, mais je bloque sur une étape et j'aurais donc besoin de lumière :D

Avec ce programme j'inscris dans un fichier .ini des infos que calcule le programme.
Exemple :

Code : Tout sélectionner

[CB534]
Type=CB534
Marque=Caterpillar
Masse=8500
Largeur=190
A1=1.2
A2=2.2
A1=V4
A2=V5
[CC722]
Type=CC722
Marque=Dynapac
Masse=11800	
Largeur=213	
A1=1.5
A2=2.4
A1=V5
A2=V5
[BW216]
Type=BW216
Marque=Bomag
Masse=11250
Largeur=213
A1=1.2	
A2=2.6
A1=V4
A2=V5
Mais je n'arrive pas à classer dans une GUICtrlCreateListView comme je veux les Item.
tout ce retrouve sur la colonne 1 !
Je m'y prend surement mal.
Merci pour votre aide.
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>

Global $File = @HomeDrive & "\Users\Tespark\Desktop\config.ini"

$Form1 = GUICreate("Form1", 615, 352, 192, 124)
$ListView1 = GUICtrlCreateListView("Type|Marque|Masse|Largeur|A1|A2", 0, 40, 600, 300)
$Input1 = GUICtrlCreateInput("", 200, 8, 177, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER))
$Button1 = GUICtrlCreateButton("Search", 409, 8, 111, 21)
GUISetState(@SW_SHOW)

$readsectionnames = IniReadSectionNames($File)

For $i = 1 To $readsectionnames[0]
        $readType = IniRead($File, $readsectionnames[$i], "Type", "")
        GUICtrlCreateListViewItem($readType, $ListView1)
Next


; ICI JE DOIS PAS FAIRE CE QU'IL FAUT
For $i = 1 To $readsectionnames[0]
        $readMarque = IniRead($File, $readsectionnames[$i], "Marque", "")
        GUICtrlCreateListViewItem($readMarque, $ListView1)
Next

; ECT...        POUR NOTER TOUTES LES INFOS DU FICHIER .INI ► Type, Marque, Masse, Largeur, A1, A2, A1, A2

_GUICtrlListView_SetColumnWidth($ListView1, 0, 150)

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Button1
                        $Search = _GUICtrlListView_FindText($ListView1, GUICtrlRead($Input1))
                        _GUICtrlListView_SetItemSelected($ListView1, $Search)
                        _GUICtrlListView_EnsureVisible($ListView1, $Search)
        EndSwitch
WEnd
Modifié en dernier par Tespark le mar. 02 avr. 2019 13:42, modifié 1 fois.

Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 1800
Enregistré le : mar. 22 juil. 2008 20:55
Localisation : Nantes
Status : Hors ligne

Re: [..]Affichage dans listView

#2

Message par TommyDDR » mar. 02 avr. 2019 10:15

Le GuiCtrlCreateListViewItem attend en paramètre de texte, (comme pour les noms des colonnes), tous les éléments de toutes les colonnes séparés par un "|"(sauf si vous l'avez modifié).

Il faut donc créer la chaine de caractères en lisant toutes les clés du ini puis créer l'item.
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>

Global $File = @ScriptDir & "\config.ini"
Global $columns = "Type|Marque|Masse|Largeur|A1|A2"

$Form1 = GUICreate("Form1", 615, 352, 192, 124)
$ListView1 = GUICtrlCreateListView($columns, 0, 40, 600, 300)
$Input1 = GUICtrlCreateInput("", 200, 8, 177, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER))
$Button1 = GUICtrlCreateButton("Search", 409, 8, 111, 21)
GUISetState(@SW_SHOW)

$readsectionnames = IniReadSectionNames($File)

For $i = 1 To $readsectionnames[0]
        Local $colSplit = StringSplit($columns, "|", 3)
        Local $txt = ""
        For $j = 0 To UBound($colSplit) -1
                If($j > 0) Then
                        $txt &= "|"
                EndIf
                $txt &= IniRead($File, $readsectionnames[$i], $colSplit[$j], "")
        Next
    GUICtrlCreateListViewItem($txt, $ListView1)
Next

; ECT...        POUR NOTER TOUTES LES INFOS DU FICHIER .INI ► Type, Marque, Masse, Largeur, A1, A2, A1, A2

_GUICtrlListView_SetColumnWidth($ListView1, 0, 150)

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Button1
                        $Search = _GUICtrlListView_FindText($ListView1, GUICtrlRead($Input1))
                        _GUICtrlListView_SetItemSelected($ListView1, $Search)
                        _GUICtrlListView_EnsureVisible($ListView1, $Search)
        EndSwitch
WEnd
Si vous avez du temps, penchez vous sur l'UDF GuiListView.au3 (écrivez "_GUICtrlListView_AddSubItem" dans SciTe, mettez votre curseur dessus et appuyez sur F1 pour avoir un bel exemple)
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

Tespark
Niveau 2
Niveau 2
Messages : 24
Enregistré le : mar. 02 avr. 2019 07:55
Status : Hors ligne

Re: [..]Affichage dans listView

#3

Message par Tespark » mar. 02 avr. 2019 10:27

Merci beaucoup pour la solution et les explications.
Je vais me pencher sur l'UDF GuiListView.au3 :D

Je vais également essayer de comprendre cette ligne avec la documentation.
  Local $colSplit = StringSplit($columns, "|", 3)
Je faisais des recherches en attendant une réponse et je suis tombé sur ce sujet.

https://autoitscript.fr/forum/viewtopic ... 118#p93118

Savez-vous pourquoi Scite me renvoi une erreur ?
For $i = 1 To $aDat0[0][0]
For $i = 1 To $aDat0^ ERROR
En tout cas, merci :wink:

Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 1800
Enregistré le : mar. 22 juil. 2008 20:55
Localisation : Nantes
Status : Hors ligne

Re: [..]Affichage dans listView

#4

Message par TommyDDR » mar. 02 avr. 2019 12:07

StringSplit va découper une chaine de caractères en un tableau contenant autant de cases qu'il y a de bout de la chaine.
La découpe se fait à chaque fois que la chaine de caractère envoyé en 2eme paramètre est rencontré.
Et le 3eme paramètre avec une valeur 3 signifie 2 choses (3 est en réalité 2 + 1) :
1 : s'il y a plusieurs caractères dans le 2eme paramètre, arrête toi seulement quand la chaine complète est trouvée (ici ça ne sert à rien)
2 : ne renvoie pas le nombre d'éléments dans la case 0 du tableau


For $i = 1 To $aDat0[0][0]
For $i = 1 To $aDat0^ ERROR
$aDat0 n'apparaissant pas dans le code que vous avez fourni, il sera impossible de vous aider, fournissez le code qui va avec ;)
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

Tespark
Niveau 2
Niveau 2
Messages : 24
Enregistré le : mar. 02 avr. 2019 07:55
Status : Hors ligne

Re: [R]Affichage dans listView

#5

Message par Tespark » mar. 02 avr. 2019 13:40

Merci beaucoup pour ces explications :D

Le lien fournit affiche $aDat0 (post 2 et 6 de Mikell) et non le code que j'ai fournit :wink:
Rien à voir avec mon sujet mais je me demandais pourquoi ce code de Mikell renvoyé une erreur.

Merci pour tout.

Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 1800
Enregistré le : mar. 22 juil. 2008 20:55
Localisation : Nantes
Status : Hors ligne

Re: [R]Affichage dans listView

#6

Message par TommyDDR » sam. 06 avr. 2019 00:31

D'accord, j'avais mal vu !

$aDat0 est défini ici :
Local $aDat0 = IniReadSection($data_ini, "team_id")
L'aide de "IniReadSection" indique :
Success: a 2 dimensional array where element[n][0] is the key and element[n][1] is the value.
Failure: sets the @error flag to non-zero if unable to read the section (The INI file may not exist or the section may not exist or is empty)

Donc si vous n'avez pas un .ini nommé du contenu de "$data_ini" à coté de votre .exe et qu'il n'y a pas de section "team_id", le retour ne sera pas un tableau !
et donc si vous essayez d'acceder à la case [0][0] d'une variable qui n'est pas un tableau... boom
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

Tespark
Niveau 2
Niveau 2
Messages : 24
Enregistré le : mar. 02 avr. 2019 07:55
Status : Hors ligne

Re: [R]Affichage dans listView

#7

Message par Tespark » lun. 08 avr. 2019 15:52

Bonjour TommyDDR

Effectivement :D

Merci pour cette explication :wink:

Répondre