Page 1 sur 1
[R] Contenu d'une section ini dans un tableau avec checkbox
Posté : lun. 14 oct. 2013 15:45
par sgonzale
Bonjour,
Je cherche à faire un tableau avec 2 colonnes.
La première colonne serait le nom d'une application avec une case à cocher, et l'autre colonne serait une liste de comptes utilisateurs liés à l'application.
J'imaginais mettre dans un fichier ini une section dédiée avec comme clé le nom de l'application et en valeur les comptes utilisateurs séparés par des virgules.
Code : Tout sélectionner
[sectionA]
appli1=user1,user12,user13
appli2=user2
appli3=user3,user31
Il y aurai un bouton du genre "GO" qui lancerai un traitement pour chaque cases cochées.
Cela vous semble faisable ?
Merci
Re: [..] Contenu d'une section ini dans un tableau avec chec
Posté : lun. 14 oct. 2013 22:21
par jguinch
Salut.
C'est faisable. As-tu un peu cherché sur le forum ? Il y a des exemples.
En attendant, voilà un code qui doit répondre à l'énoncé :
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <ListviewConstants.au3>
#include <GuiListView.au3>
Global $sFileName = @ScriptDir & "\applications.ini"
Global $sSectionName = "APPLICATIONS"
Global $aKeys = IniReadSection($sFileName, $sSectionName)
If @error Then Exit MsgBox(16, "Error", "An error occured while trying to read the configuration file")
Global $aApps[ $aKeys[0][0] ]
Global $hGui = GUICreate("Applications list", 400,260 )
Global $IDListView = GUICtrlCreateListView("Applications|Users", 10, 10, 380, 200, -1, $LVS_EX_CHECKBOXES + $LVS_EX_GRIDLINES)
For $i = 1 To $aKeys[0][0]
$aApps[$i - 1] = GUICtrlCreateListViewItem( $aKeys[$i][0] & "|" & $aKeys[$i][1], $IDListView)
Next
Global $IDButtonGo = GUICtrlCreateButton("GO", 50, 225, 100, 25)
Global $IDButtonCancel = GUICtrlCreateButton("Cancel", 250, 225, 100, 25)
GUISetState()
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE OR $msg = $IDButtonCancel Then ExitLoop
If $msg = $IDButtonGo Then _Go()
Sleep(50)
WEnd
Func _Go()
Local $sLine, $sAppName, $sAppUsers
For $i = 0 To UBound($aApps) - 1
If _GUICtrlListView_GetItemChecked($IDListView, $i) Then
$sLine = _GUICtrlListView_GetItemTextString($IDListView, $i)
$sAppName = StringRegExpReplace($sLine, "\A([^|]+).*", "$1")
$sAppUsers = StringRegExpReplace($sLine, ".*?\|(.*)", "$1")
MsgBox(0, "Selected application", "Name : " & $sAppName & @CRLF & "Users : " & $sAppUsers)
EndIf
Next
EndFunc
Re: [..] Contenu d'une section ini dans un tableau avec chec
Posté : mar. 15 oct. 2013 10:43
par sgonzale
Bonjour,
Super !
Merci c'est ce que je voulais.
Re: [..] Contenu d'une section ini dans un tableau avec chec
Posté : mar. 15 oct. 2013 10:47
par jguinch
Si c'est OK, met un [R] dans le sujet de ton premier topic.
Re: [..] Contenu d'une section ini dans un tableau avec chec
Posté : mar. 15 oct. 2013 16:08
par sgonzale
Je me permets de réouvrir le sujet.
Pour continuer dans mon exemple, je voudrais pouvoir récupérer la première valeur contenu dans la clé de la section du .ini quand je clique sur le bouton GO.
Code : Tout sélectionner
[sectionA]
appli1=user1,user12,user13
appli2=user2
appli3=user3,user31
Par rapport à ce qui est dessus, je voudrais récupérer "user1" si je coche "appli1".
Le but est de faire une action différente avec la première occurence trouvé et les autres
J'ai bien ramené la liste dans un tableau mais je n'arrive à dire que si j'ai l'indice 0 (user1) de mon tableau je fais une actionA, sinon (user12, user13) je fais une actionB.
Re: [..] Contenu d'une section ini dans un tableau avec chec
Posté : mar. 15 oct. 2013 22:57
par jguinch
► Afficher le texte_go()
Code : Tout sélectionner
Func _Go()
Local $sLine, $sAppName, $sAppUsers
For $i = 0 To UBound($aApps) - 1
If _GUICtrlListView_GetItemChecked($IDListView, $i) Then
$sLine = _GUICtrlListView_GetItemTextString($IDListView, $i)
$sAppName = StringRegExpReplace($sLine, "\A([^|]+).*", "$1")
$sAppUsers = StringRegExpReplace($sLine, ".*?\|(.*)", "$1")
$aSplit = StringSplit($sAppUsers, ",")
For $i = 1 To $aSplit[0]
If $aSplit[$i] = "user1" Then MsgBox(0, "", "The application """ & $sAppName & """for user1 is selected")
Next
EndIf
Next
EndFunc
Re: [..] Contenu d'une section ini dans un tableau avec chec
Posté : jeu. 17 oct. 2013 10:36
par sgonzale
Bonjour,
Merci, mais ce n'est pas exactement ça que je voudrais faire.
Je me suis surement mal exprimé.
En fait quelque soit la valeur de mon premier indice, je veux faire un traitement différent des indices suivants.
Je ne veux pas dire "Si indice 1=user1 alors...", mais "si indice=1 alors..."
On peut prendre comme exemple que le premier indice est le parent (use1, user2, user3) et que les autres (use12,user13 et user31) sont les enfants
Re: [..] Contenu d'une section ini dans un tableau avec chec
Posté : jeu. 17 oct. 2013 15:30
par jguinch
Je sais pas si j'ai vraiment tout compris...
► Afficher le texte
Code : Tout sélectionner
Func _Go()
Local $sLine, $sAppName, $sAppUsers
For $i = 0 To UBound($aApps) - 1
If _GUICtrlListView_GetItemChecked($IDListView, $i) Then
If $i = 0 Then MsgBox(0, "", "La premiere application a été sélectionné")
EndIf
Next
EndFunc
Re: [..] Contenu d'une section ini dans un tableau avec chec
Posté : ven. 18 oct. 2013 11:09
par sgonzale
Bonjour,
J'ai trouvé et comme toujours c'est simple....
Comme la commande StringSplit génère un tableau, il suffit de prendre la position 1 du tableau (la position 0 étant le nb d'élément du tableau).
Ca implique que dans le .ini la première valeur soit toujours le parent, mais ça c'est ma contrainte...
Merci de vos aides !
Code : Tout sélectionner
global $arrayUsers = StringSplit($sAppUsers, ",")
For $i = $arrayUsers[0] to 1 Step -1
if $arrayUsers[$i]=$arrayUsers[1] Then
...traitement du parent
Else
...traitement de l'enfant
EndIf
Next