Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <File.au3>
#include <Array.au3>
; on commence par lire le fichier ini
Dim $fichieragences, $Agences[1][2]
_FileReadToArray("c:\appli.loc\verif_prog\agence.prm", $fichieragences)
; et on le nettoie
$nbagences = 0
For $i = 1 To $fichieragences[0]
If StringInStr($fichieragences[$i], "[") = 0 And $fichieragences[$i] <> "" Then ; on commence par virer les lignes avec des crochets (totalement inutile)
ReDim $Agences[$nbagences + 1][2]
$split = StringSplit($fichieragences[$i], "=") ; on sépare d'un coté le code, de l'autre le nom de l'entité
$Agences[$nbagences][0] = StringReplace($split[1], " ", ""); et on vire les espaces que servent a indenter le fichier ini
$Agences[$nbagences][1] = $split[2]
$nbagences = $nbagences + 1
EndIf
Next
$Form1 = GUICreate("Choisissez votre UT", 216, 272, 391, 228) ; Création de la fenêtre
; on crée une première combo box
$ComboDT = GUICtrlCreateCombo("Choisissez votre DT", 16, 32, 185, 25)
; et comme liste, on lui met ...
$DT = ""
For $i = 0 To UBound($Agences) - 1
If StringLen($Agences[$i][0]) = 2 Then ; les noms d'entité dont le code fait 2 chiffres
$DT = $DT & $Agences[$i][1] & "|"
EndIf
Next
GUICtrlSetData($ComboDT, StringTrimRight($DT, 1))
; uns seconde combo box avec rien dedans, et qu'on désactive
$ComboAG = GUICtrlCreateCombo("", 16, 96, 185, 25)
GUICtrlSetState($ComboAG, $GUI_DISABLE)
; et une 3eme idem
$ComboUT = GUICtrlCreateCombo("", 16, 160, 185, 25)
GUICtrlSetState($ComboUT, $GUI_DISABLE)
;Créer les boutons Valider et Annuler (ca c'est toi qui l'avait fait ;) moi j'ai juste désactiver le btn "Valider")
$Btn1 = GUICtrlCreateButton("Valider", 24, 224, 81, 25, 0)
GUICtrlSetState($Btn1, $GUI_DISABLE)
$Btn2 = GUICtrlCreateButton("Annuler", 120, 224, 73, 25, 0)
;Créer les zones de texte servant de légende aux combobox (ca aussi)
$Input1 = GUICtrlCreateInput("Direction Territoriale", 16, 8, 185, 21)
$Input2 = GUICtrlCreateInput("Agence", 16, 72, 185, 21)
$Input3 = GUICtrlCreateInput("Unité Territoriale", 16, 136, 185, 21)
;Retourne l'affichage du code de l'UT (ca je te l'ai mis dans un label plutot qu'un inputbox, vu qu'il va se remplirt tout seul)
$AfficheCodeUT = GUICtrlCreateLabel("", 80, 192, 56, 21, $SS_CENTER, $WS_EX_CLIENTEDGE)
GUICtrlSetBkColor($AfficheCodeUT, 0xFFFFFF)
GUICtrlSetColor($AfficheCodeUT, 0x008080)
GUICtrlSetState($AfficheCodeUT, $GUI_DISABLE)
;Afficher la fenêtre
GUISetState(@SW_SHOW)
;~ Et c'est parti pour le show...
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE, $Btn2 ; annuler ou la croix -> au revoir
Exit
Case $Btn1 ;--> Fin de la box, sauvegarde du code d'UT, suite de PC_verif_prog à la sortie de la boucle
; là j'ai juste mis une msgbox pour que tu saches récupérer les éléments pour la suite
MsgBox(0, "Votre choix :", "DT : " & GUICtrlRead($ComboDT) & @CRLF & "AG : " & GUICtrlRead($ComboAG) & @CRLF & "UT : " & GUICtrlRead($ComboAG) & @CRLF & "Code : " & GUICtrlRead($AfficheCodeUT))
Exit
;$codeut à mettre dans l'user.ini
;Run(verif_prog[1][1])
Case $ComboDT ; on a choisi un DT
; donc on commece par désactiver les combo suivants, ainsi que le bouton valider (ca permet de garder un comportement cohérent a la gui)
GUICtrlSetState($ComboAG, $GUI_DISABLE)
GUICtrlSetState($ComboUT, $GUI_DISABLE)
GUICtrlSetState($Btn1, $GUI_DISABLE)
For $i = 0 To UBound($Agences) - 1 ; puis on cherche...
If GUICtrlRead($ComboDT) = $Agences[$i][1] Then ; ... le code de l'entité qui a été seléctionnée
$AG = "|Choisissez votre AG|"
For $j = 0 To UBound($Agences) - 1 ; on remplit donc le combo suivant avec les 'enfants' (cad les noms d'entités dont code commence...
If StringLeft($Agences[$j][0], 2) = $Agences[$i][0] And StringLen($Agences[$j][0]) = 4 Then ; ... par les 2 chiffres de l'entité d'avant, et qui font 4 chiffres seulement (ca évite de prendre les petits enfants)
$AG = $AG & $Agences[$j][1] & "|" ; on génere donc la liste a afficher dans le combo avec tout ca.
EndIf
Next
GUICtrlSetData($ComboAG, StringTrimRight($AG, 1), "Choisissez votre AG") ; on met la liste dans le combo
GUICtrlSetState($ComboAG, $GUI_ENABLE); et on l'active
EndIf
Next
Case $ComboAG
; idem celui d'avant on désactive les combos suivants et le bouton
GUICtrlSetState($ComboUT, $GUI_DISABLE)
GUICtrlSetState($Btn1, $GUI_DISABLE)
For $i = 0 To UBound($Agences) - 1 ; puis on cherche...
If GUICtrlRead($ComboAG) = $Agences[$i][1] Then ; ... le code de l'entité selectionnée
$UT = "|Choisissez votre UT|"
For $j = 0 To UBound($Agences) - 1 ; on prend les enfants des enfants donc les noms d'entité commencent
If StringLeft($Agences[$j][0], 4) = $Agences[$i][0] And StringLen($Agences[$j][0]) = 6 Then ; par les 4 chiffres de l'entité d'avant
$UT = $UT & $Agences[$j][1] & "|" ; on fait la liste
EndIf
Next
GUICtrlSetData($ComboUT, StringTrimRight($UT, 1), "Choisissez votre UT") ; on met la liste dans le combo
GUICtrlSetState($ComboUT, $GUI_ENABLE) ; et on active
EndIf
Next
Case $ComboUT
GUICtrlSetState($Btn1, $GUI_DISABLE) ; on désactivele bouton
If GUICtrlRead($ComboUT) <> "Choisissez votre UT" Then ; on vérifie que le choix est bien une entité
For $i = 0 To UBound($Agences) - 1 ; on cherche...
If GUICtrlRead($ComboUT) = $Agences[$i][1] Then ; ... son code
GUICtrlSetData($AfficheCodeUT, $Agences[$i][0]) ; qu'on met dans le label pour bien montrer qu'on l'a trouvé
EndIf
Next
GUICtrlSetState($Btn1, $GUI_ENABLE); et on activele bouton OK
Else
GUICtrlSetData($AfficheCodeUT, "") ; si le choix est pas une entité, on vide le label.
EndIf
EndSwitch
WEnd