[RESOLU] Constantes GadgetID sous forme de tableaux

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

[RESOLU] Constantes GadgetID sous forme de tableaux

Message 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
Dernière modification par omega le lun. 21/déc./2015 20:12, modifié 1 fois.
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Constantes GadgetID sous forme de tableaux

Message 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.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Constantes GadgetID sous forme de tableaux

Message 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.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Constantes GadgetID sous forme de tableaux

Message 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
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Constantes GadgetID sous forme de tableaux

Message 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.
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Constantes GadgetID sous forme de tableaux

Message 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
:wink:
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Constantes GadgetID sous forme de tableaux

Message 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
:wink:
Dernière modification par Marc56 le sam. 19/déc./2015 15:39, modifié 1 fois.
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Constantes GadgetID sous forme de tableaux

Message par Marc56 »

Tu chipotes :mrgreen:

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.
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Constantes GadgetID sous forme de tableaux

Message par MLD »

@ Marc56

C'est un Breton du 35 qui te parle
Le chouchen rend fou, mais quand même :oops:
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. :wink:
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Constantes GadgetID sous forme de tableaux

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Constantes GadgetID sous forme de tableaux

Message 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.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Constantes GadgetID sous forme de tableaux

Message par Marc56 »

Comme je fais toutes mes interfaces avec le Form Designer (oui, ça marche très bien ce truc :P ) 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).

:wink:
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Constantes GadgetID sous forme de tableaux

Message par omega »

Merci à tous

Grosso modo :

Code : Tout sélectionner

Enumeration
#string1=1
#string2=2
#string3=3
EndEnumeration


est l'équivalent de :

Code : Tout sélectionner

Enumeration 1
#string1
#string2
#string3
EndEnumeration


C'est impeccable . Merci encore (je vais tester demain)
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

[RESOLU] Constantes GadgetID sous forme de tableaux

Message par omega »

@spock
Merci beaucoup pour ces précieuses informations
Dernière modification par omega le lun. 21/déc./2015 20:11, modifié 1 fois.
Win7 (x64) 64 bits Pb 5.72
Répondre