Je ne sais pas si le titre correspond bien à mon problème.
Dans une interface, je liste des données contenus dans un fichier .ini avec des labels. Le problème, c'est que le nombre de label va dépendre de l'utilisateur, si il y a un trop grand nombre de label, ils dépasseront de la GUI. De plus, comment définir la position des labels lors de l'appelle de la fonction GUICtrlCreateLabel.
Local $aGUI = GuiCreate("GETNP++", 500, 200, 200, 200)
Local $aMenu1 = GUICtrlCreateMenu("Espace de travail")
Local $aMenu1Item1 = GUICtrlCreateMenuItem("Nouveau...", $hMenu1)
Local $aMenu1Item2 = GUICtrlCreateMenuItem("Supprimer...", $hMenu1)
Local $aMenu2 = GUICtrlCreateMenu("Mise à jour")
Local $aMenu2Item1 = GUICtrlCreateMenuItem("Mise à jour", $hMenu2)
Local $aMenu2Item2 = GUICtrlCreateMenuItem("Mise à jour automatique", $hMenu2)
Local $aMenu3 = GUICtrlCreateMenu("GETNP++")
Local $aMenu3Item1 = GUICtrlCreateMenuItem("Aide", $hMenu3)
Local $aMenu3Item2 = GUICtrlCreateMenuItem("Fermer", $hMenu3)
For $i = 1 To UBound($aEspaceTravail)
Local $aLabel&$i = GUICtrlCreateLabel($aEspaceTravail[$i-1], ?, ?, ?, ?)
Next
Il faut stocker la position Y dans une variable et l'incrémenter au fur et à mesure de la création des labels.
Puis WinMove pour redimensionner la fenêtre (tu peux calculer la bonne dimension dès la création de la GUI aussi)
Ex :
Voici ce que j'ai fait à part de mon programme pour tester la gui dynamique. J'ai un petit problème, seul les 5 premières valeurs de l'array s'affiche, les autres non. Pourtant j'utilise la fonction UBound dans la boucle for.
; Déclarations des variables dynamiques
Local $iaCtrlTop = 10
Local $iaCtrlSpace = 10
Local $iaCtrlHeight = 25
Local $ibCtrlTop = 10
Local $ibCtrlHeight = 20
Local $aEspaceTravailNom[7] = ["A", "B", "C", "D", "E", "F", "G"]
; Création de l'interface principale (a)
Local $aGUI = GuiCreate("GETNP++", 450, 200, -1, -1)
Local $aMenu1 = GUICtrlCreateMenu("Espace de travail")
Local $aMenu1Item1 = GUICtrlCreateMenuItem("Nouveau...", $aMenu1)
Local $aMenu1Item2 = GUICtrlCreateMenuItem("Supprimer...", $aMenu1)
Local $aMenu2 = GUICtrlCreateMenu("Mise à jour")
Local $aMenu2Item1 = GUICtrlCreateMenuItem("Mise à jour", $aMenu2)
Local $aMenu2Item2 = GUICtrlCreateMenuItem("Mise à jour automatique", $aMenu2)
Local $aMenu3 = GUICtrlCreateMenu("GETNP++")
Local $aMenu3Item1 = GUICtrlCreateMenuItem("Aide", $aMenu3)
Local $aMenu3Item2 = GUICtrlCreateMenuItem("Fermer", $aMenu3)
For $i = 0 To UBound($aEspaceTravailNom)-1
Local $aLabel = GUICtrlCreateLabel($aEspaceTravailNom[$i], 10, $iaCtrlTop, 430, $iaCtrlHeight)
$iaCtrlTop += $iaCtrlSpace + $iaCtrlHeight
Next
WinMove($aGUI, "", Default, Default, Default, $iaCtrlTop + $iaCtrlHeight)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
La GUI ne fonctionne pas correctement avec mon programme. J'ai mit longtemps avant de comprendre d'où venait le problème mais je ne sais pas comment le résoudre :
Lorsque je laisse le reste de la GUI en commentaires, tout fonctionne parfaitement mais lorsque je vais intégrer mon menu dans la GUI, les labels sont coupés.
Ah oui, le menu prend de la place dans la GUI et décale tout...
Tu dois pouvoir calculer la taille du menu, mais j'avoue que j'ai pas trop cherché dans les UDF, j'ai fait au plus simple avec l'utilisation de 2 WinGetClientSize (un avant et un après la création du menu)