Page 1 sur 1
[R] Création/gestion de plusieurs boutons
Posté : sam. 10 mars 2012 17:26
par Sylvaindd
Bonjour, après plusieurs recherches sur Google et sur ce forum je n'ai pas trouvé de solution à mon problème, c'est pourquoi je postes mon problème ici, espérant trouver enfin une solution

Alors voilà, je veux me faire une petite Gui avec plusieurs boutons, disons 24 maxi, sachant que ceux-ci pourront être supprimés ou ajoutés via une Input avec un UpDown
Voilà mon Code pour le moment :
► Afficher le texte
Code : Tout sélectionner
#include <EditConstants.au3>
#Include <Array.au3>
#include <GuiConstantsEx.au3>
#include <GuiButton.au3>
#Include <GuiMenu.au3>
#include <UpdownConstants.au3>
Global $GUI = GUICreate("Gestionnaire", 321, 221, -1, -1)
GUICtrlCreateLabel("Nombre de boutons: ",5,5)
$NbrEpz=GuiCtrlCreateInput("1", 100, 3, 40, 20,BitOR($ES_NUMBER,$ES_READONLY))
$UpDown=GuiCtrlCreateUpDown(-1,$UDS_ALIGNRIGHT)
GUICtrlSetLimit (-1,1,24)
Global $Button[24]
$NBR=GUICtrlRead($NbrEpz)
_button($NBR)
GUISetState()
While 1
$nMsg=GUIGetMsg()
Switch $nMsg
Case $Button[0] To $Button[_ArrayMaxIndex($Button,1)]
For $i = 0 To _ArrayMaxIndex($Button,1)
If $nMsg = $Button[$i] Then MsgBox(0,'',$i+1)
Next
Case $UpDown
$NBR=GUICtrlRead($NbrEpz)
_button($NBR)
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func _button($NBR)
If _ArrayMaxIndex($Button,1)=$NBR Then
_GUICtrlButton_Destroy($Button[$NBR])
_ArrayDelete($Button, _ArrayMaxIndex($Button,1))
Else
Global $Button[24],$TopButton=0,$LeftButton=5
For $i = _ArrayMaxIndex($Button,1)+1 to $NBR
$TopButton=$TopButton+30
$EPZ="Bouton "&$i
If $i<10 Then $EPZ="Bouton 0"&$i
If $i>6 And $LeftButton<30 Then
$LeftButton=$LeftButton+70
$TopButton=30
EndIf
If $i>12 And $LeftButton<100 Then
$LeftButton=$LeftButton+70
$TopButton=30
EndIf
If $i>18 And $LeftButton<170 Then
$LeftButton=$LeftButton+70
$TopButton=30
EndIf
$Button[$i-1]=GUICtrlCreateButton($EPZ,$LeftButton,$TopButton)
Next
EndIf
EndFunc
Les différents problèmes:
-J'arrives à créer les 24 boutons sans problèmes, mais je n'arrives pas à supprimer correctement, la suppression fonctionne unique si je re-créer un bouton et que je le re-supprime, je peux en gros supprimer que le dernier.
-Pour ce qui est de la petite MsgBox, elle ne fonctionne que pour le dernier bouton créé, pas pour les autres.
-J'aimerais donc savoir d'où viennent ces 'bugs', je pense que ça vient de l'Array, je ne dois pas la gérer correctement, mais je vois ce que c'est

.
Merci d'avance pour votre aide !
Re: Demande d'aide pour la création/gestion de plusieurs bou
Posté : sam. 10 mars 2012 20:09
par Kagami
Houla, édite vite ton titre et ajoutes [..] et met ton code en spoiler avec un Admin/Modo ne passe par la :p
Tu recevras de l'aide après avoir fait ça

Re: [...] Création/gestion de plusieurs boutons
Posté : sam. 10 mars 2012 20:10
par Sylvaindd
Fait ! Merci du conseil

Re: [...] Création/gestion de plusieurs boutons
Posté : sam. 10 mars 2012 22:25
par Tlem
Dans un cas comme le votre, je créerais la totalité des boutons afin d'obtenir chaque ID dans le tableau (mais je les rendrait invisibles à la création). Ensuite, une simple gestion d'affichage ou de masquage de ce qui doit être modifié et le tour est joué.
Re: [...] Création/gestion de plusieurs boutons
Posté : sam. 10 mars 2012 22:29
par mikell
Pas la joie ton script...
Le problème vient que tu reconstruis une ribambelle de boutons à chaque fois, et le script s'y perd...
Tu peux le vérifier en mettant un _ArrayDisplay($Button) dans la fonction, tu vas voir, c'est pas triste ^^
Et essaie d'utiliser des fonctions les plus simples possibles, tu te faciliteras la vie
Regarde ça, c'est simple et ça va tout seul
► Afficher le texte
Code : Tout sélectionner
#include <EditConstants.au3>
#Include <Array.au3>
#include <GuiConstantsEx.au3>
#include <UpdownConstants.au3>
Global $Button[1]
Global $GUI = GUICreate("Gestionnaire", 321, 221, -1, -1)
GUICtrlCreateLabel("Nombre de boutons: ",5,5)
$NbrEpz = GuiCtrlCreateInput("1", 100, 3, 40, 20,BitOR($ES_NUMBER,$ES_READONLY))
$UpDown = GuiCtrlCreateUpDown(-1,$UDS_ALIGNRIGHT)
GUICtrlSetLimit (-1,1,24)
_button()
GUISetState()
While 1
$nMsg=GUIGetMsg()
For $i = 0 To UBound($Button)-1
If $nMsg = $Button[$i] Then Msgbox(0, "", "bouton " & $i+1)
Next
Switch $nMsg
Case $UpDown
_button()
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func _button()
Local $n = GUICtrlRead($NbrEpz)
If $n < UBound($Button) Then
GUICtrlDelete($Button[$n])
_ArrayDelete($Button, $n)
Else
If UBound($Button)<24 Then
Redim $Button[$n]
If Mod($n, 6) = 0 Then
$nx = ($n/6-1)*60
Else
$nx = (Floor($n/6)*60)
EndIf
$ny = (Mod($n-1, 6)*30)
$EPZ="Bouton "& $n
$Button[$n-1] = GUICtrlCreateButton($EPZ, $nx+10, $ny+40, 55, 25)
EndIf
EndIf
EndFunc
EDIT
Grillé par le boss
Mais il a raison, le script est fun mais pas pratique, tu ne peux détruire les boutons qu'en remontant à partir du dernier
Re: [...] Création/gestion de plusieurs boutons
Posté : sam. 10 mars 2012 22:30
par Sylvaindd
En effet, mais étant novice je ne connaissais pas les fonctions que tu as utilisé, mais ton code marche à la perfection, merci mikell !
Re: [...] Création/gestion de plusieurs boutons
Posté : dim. 11 mars 2012 15:09
par Kagami
Maintenant que tu as été aidé, édites ton premier message en mettant [R] comme balise
