Page 1 sur 1
[RESOLU] Constantes GadgetID sous forme de tableaux
Publié : sam. 19/déc./2015 0:15
par omega
Bonjour à tous,
Je ne sais pas si j'ai choisi le bon titre, mais je crois qu'il faut donner des explications plus précises. Je vais le faire en donnant ces exemples:
J'utilise (par exemple) les gadgets suivants sur ma fenêtre:
Code : Tout sélectionner
textGadget(#txt1,10,10,100,20,"")
stringGadget(#str1,130,10,100,20,"")
textGadget(#txt2,10,40,100,20,"")
stringGadget(#str2,130,40,100,20,"")
textGadget(#txt3,10,70,100,20,"")
stringGadget(#str3,130,70,100,20,"")
etc... je fais ça une dizaine de fois.. Ma question est la suivante:
Peut on remplacer les noms des gadgets par une constante tableau? #txt(i) et #Str(i)
Merci
Re: Constantes GadgetID sous forme de tableaux
Publié : sam. 19/déc./2015 0:35
par falsam
Non ce n'est pas possible comme tu as pu t'en rendre compte si tu as fait des tests.
Une façon de faire
Code : Tout sélectionner
Enumeration Window
#MainForm
EndEnumeration
Global Dim Texts(10)
Global Dim Strings(10)
If OpenWindow(#MainForm, 0, 0, 1024, 768, "Demo", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
Texts(0) = TextGadget(#PB_Any, 10, 10, 100, 20, "Text0")
Strings(0) = StringGadget(#PB_Any, 100, 10, 150, 22, "")
Texts(1) = TextGadget(#PB_Any, 10, 35, 100, 20, "Text1")
Strings(1) = StringGadget(#PB_Any, 100, 35, 150, 22, "")
Texts(2) = TextGadget(#PB_Any, 10, 60, 100, 20, "Text2")
Strings(2) = StringGadget(#PB_Any, 100, 60, 150, 22, "")
Repeat
Event = WaitWindowEvent(10)
Gadget= EventGadget()
Select Event
Case #PB_Event_Gadget
Select Gadget
Case Strings(0) To Strings(2)
Select EventType()
Case #PB_EventType_Focus
Debug "Focus sur le gaget " + Gadget
EndSelect
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
EndIf
Le tableau Texts() n'est pas forcément nécessaire. Tout dépend de ce que tu fais de tes libellés.
Re: Constantes GadgetID sous forme de tableaux
Publié : sam. 19/déc./2015 10:02
par MLD
Perso J'aime assz faire comme ceci
Code : Tout sélectionner
Enumeration
#fen = 0 ;fen principale
#string_1 = 1
#string_2 = 2
#string_3 = 3
EndEnumeration
OpenWindow(#fen,100,100, 200, 200, "Demo",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
StringGadget(1, 20, 35, 150, 22, " Pure Basic")
StringGadget(2, 20, 85, 150, 22, " Pure Basic")
StringGadget(3, 20, 135, 150, 22, " Pure Basic")
For y = 1 To 3
SetGadgetColor(y,#PB_Gadget_BackColor,$00FFFF)
Next
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
End
Bien entendu tu peu combiner avec ce que propose falsam.
Je trouve ce système assez pratique quand une fenêtre comporte beaucoup de gadgets.
Re: Constantes GadgetID sous forme de tableaux
Publié : sam. 19/déc./2015 10:22
par Ar-S
Dans les énumerations, il m'avait sembler lire je sais plus où qu'il vaut mieux laisser "enumeration" numéroter les gadgets.
En plus c'est plus court et ça en fait moins à taper pour le même resultat
Code : Tout sélectionner
Enumeration 0 ; ton numéro de départ.
#fen ; = 0 ;fen principale
#string_1 ; 1
#string_2 ; 2
#string_3 ; 3
EndEnumeration
OpenWindow(#fen,100,100, 200, 200, "Demo",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
StringGadget(1, 20, 35, 150, 22, " Pure Basic")
StringGadget(2, 20, 85, 150, 22, " Pure Basic")
StringGadget(3, 20, 135, 150, 22, " Pure Basic")
For y = 1 To 3
SetGadgetColor(y,#PB_Gadget_BackColor,$00FFFF)
Next
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
End
Re: Constantes GadgetID sous forme de tableaux
Publié : sam. 19/déc./2015 14:42
par MLD
@Ar-s
PB Permet de faire ce que je fait. Ce qu'il ne faut éviter c'est:
#gadget_1 = 1
#gadget_2 = 20
La numérotation automatique par Enumération c'est bien, mais quand sur une fenêtre il ya 80 gadgets que certains sont visible et d'autres non a certains moments. pour y retrouver ces petits cela devient coton.
Si Fred a permis de faire cela je supose que ce n'est pas pour rien.
Re: Constantes GadgetID sous forme de tableaux
Publié : sam. 19/déc./2015 14:56
par Marc56
Code : Tout sélectionner
Enumeration
#fen = 0 ;fen principale
#string_1 = 1
#string_2 = 2
#string_3 = 3
EndEnumeration
Enumérations
...Si nécessaire, il est possible d'affecter directement une valeur numérique à une constante (grâce à l'opérateur '=') et les constantes suivantes utiliseront cette nouvelle valeur comme valeur de base...
Code : Tout sélectionner
Enumeration
#fen = 0 ;fen principale
#string_1 = 1
#string_2 ; devient automatiquement 2
#string_3 ; devient automatiquement 3
#string_10 = 10
#string_11 ; devient automatiquement 11
EndEnumeration
Si c'est pour tout numéroter à la main, alors inutile de la mettre dans un bloc énumérations
Code : Tout sélectionner
#fen = 0 ;fen principale
#string_1 = 1
#string_2 = 2
#string_3 = 3

Re: Constantes GadgetID sous forme de tableaux
Publié : sam. 19/déc./2015 15:36
par Marc56
Spock a écrit :
Ar-s avait mis des commentaires pour signaler que l'indice augmente dans une enumeration !
tu as retiré les ";" de son exemple , c'est pas fairPlay
Regarde plus haut dans le topic,
ce n'est pas celui de Ar-s que j'ai cité, mais celui de MLD.
MLD a écrit :Perso J'aime assz faire comme ceci
Code : Tout sélectionner
Enumeration
#fen = 0 ;fen principale
#string_1 = 1
#string_2 = 2
#string_3 = 3
EndEnumeration

Re: Constantes GadgetID sous forme de tableaux
Publié : sam. 19/déc./2015 15:43
par Marc56
Tu chipotes
C'était juste pour illustrer que:
Code : Tout sélectionner
Enumeration
#fen = 0 ;fen principale
#string_1 = 1
#string_2 = 2
#string_3 = 3
EndEnumeration
L'affectation d'une valeur numérique ne sert à rien dès la deuxième ligne si les numéros sont consécutifs.
Re: Constantes GadgetID sous forme de tableaux
Publié : sam. 19/déc./2015 16:16
par MLD
@ Marc56
C'est un Breton du 35 qui te parle
Le chouchen rend fou, mais quand même
Bien sur pour un petit nombre de gadgets, cela ne sert a rien.
Mais sur un grand nombre c'est autre chose.
d'autre part j'ai l'habitude de scinder mes programmes en blocs de fonctions, et en cours de programmation les numéros ne sont pas obligatoirement consécutifs.
Un de mes programme fait environs 30000 lignes et manipule 280 gadgets. Pour retrouver ces petits aprés plusieurs mois sans s'occuper du programme , il faut être un tantinet organiser.

Re: Constantes GadgetID sous forme de tableaux
Publié : sam. 19/déc./2015 16:18
par falsam
Marc56 a écrit :Tu chipotes
C'est clair que Spock chipote. En plus il ne me lit meme pas et propose une solution similaire à la mienne et sans balise [
Code] ... [/
Code] ^^
Meme si le code que je propose <<
ici>> me parait plus adéquate pour une insertion de gadgets dynamiques, je vous propose une autre solution que G-Rom m'a donné il y a longtemps pour un cas similaire.
Code : Tout sélectionner
Enumeration Window
#MainForm
EndEnumeration
;Exemple pour la réservation de 10 gadgets
Enumeration Gadgets 0 Step 9
#String0
#String9
EndEnumeration
Declare OnGadgetEvent()
If OpenWindow(#MainForm, 0, 0, 1024, 768, "Demo", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
y=10
For Gadget = #String0 To #String9
y+25
TextGadget(#PB_Any, 10, y, 100, 22, "Text " + Gadget)
StringGadget(Gadget, 110, y, 150, 22, "")
BindGadgetEvent(Gadget, @OnGadgetEvent(), #PB_EventType_Focus)
Next
SetActiveGadget(#String0)
Repeat : Until WaitWindowEvent(10) = #PB_Event_CloseWindow
EndIf
Procedure OnGadgetEvent()
Gadget = EventGadget()
Debug "Gadget " + Gadget +" En cours de saisie"
EndProcedure
Re: Constantes GadgetID sous forme de tableaux
Publié : sam. 19/déc./2015 18:35
par Ar-S
Bon l'important est de s'y retrouver dans ses enumerations.
Lorsque je sais que je vais avoir des "objets" en pagaille, je préfère numéroter ainsi
Code : Tout sélectionner
Enumeration 0 ; GUI
#WINDOW
#GADGET
EndEnumeration
Enumeration 10 ; DATAS
#SON_boom
#SON_paf
#IMG_titre
#IMG_BACKGROUND
EndEnumeration
Enumeration 100 ; CHECKBOX
#CH1
#CH2
#CH3
#CH4
;etc
#LAST_CH
EndEnumeration
For i = #CH1 To #LAST_CH
Debug "Action sur mes checkbox : CH n° " + Str(i)
Next
Enfin, lorsqu'on brasse beaucoup d'objets, il convient de mêler tout ça à des structures, ce qui clarifie pas mal les choses.
ça donne
Code : Tout sélectionner
Enumeration 0
#WINDOW
#GADGET
#SON_boom
#SON_paf
#IMG_titre
#IMG_BACKGROUND
#CH1
#CH2
#CH3
#CH4
;etc
#LAST_CH
EndEnumeration
Structure OBJ
ID.b
EndStructure
Global Dim OBJ.OBJ(#LAST_CH)
For i = 0 To #LAST_CH
OBJ(i)\ID = i
Debug OBJ(i)\ID
Next
On peut ensuite ajouter d'autres champs à sa structure (name.s etc..) ce qui permet aisément de savoir quel numéro correspond à quoi.
Re: Constantes GadgetID sous forme de tableaux
Publié : sam. 19/déc./2015 18:53
par Marc56
Comme je fais toutes mes interfaces avec le
Form Designer (oui, ça marche très bien ce truc

) j'ai pris l'habitude de mettre dès le début les mêmes noms d'énumérations dans le code principal
(Comme c'est le Form Designer qui défini les noms, je le suis.)
Code : Tout sélectionner
XIncludeFile "... pbf"
; et je continue donc avec les mêmes noms.
Enumeration FormWindow
EndEnumeration
Enumeration FormGadget
EndEnumeration
Enumeration FormMenu
EndEnumeration
Enumeration FormImage
EndEnumeration
Ensuite je rentre mes constantes dans l'énumération ad hoc.
Je me suis rendu compte de cette nécessité en voyant disparaitre des icônes de menu et autres bizarreries
(j'avais créé d'autres menus dans le code principal et des ID identiques ont été utilisées).

Re: Constantes GadgetID sous forme de tableaux
Publié : sam. 19/déc./2015 21:37
par omega
Merci à tous
Grosso modo :
est l'équivalent de :
C'est impeccable . Merci encore (je vais tester demain)
[RESOLU] Constantes GadgetID sous forme de tableaux
Publié : dim. 20/déc./2015 22:18
par omega
@spock
Merci beaucoup pour ces précieuses informations