Page 1 sur 1

[Résolu] Enumérations nommées et module

Publié : sam. 28/avr./2018 22:53
par Ulix
Salut a tous !

J'ai encore des problème avec les modules ! :oops:
J'utilise les énumérations nommées (ex: enumeration fenetre, enum... gadget..etc) !
Mais apparemment cela ne marche pas dans les modules (énumération recommence a 0),
d'où des conflits (j'ai la parade, mais attribué des valeurs manuellement aux gadgets...)

J'ai préparer un petit bout de code pour que vous puissiez testé, dite moi :
BUG ou pas ! Dite moi ou je me suis planté ! :twisted:
Merci d'avance

Code : Tout sélectionner



;	Enumérations nommées et module

;	Quelle est l’intérêt si on ne peut pas utilisé les "Enumérations nommées"
;	C'est exemple illustrer par le 1er Test !!! Le programme plante a la fermeture 
;	de la deuxième fenêtre (Normal les constante de la fenêtre et des gadget ont 
;	été réattribués  !! Donc plus des fenêtre de retour)

;	Le bon comportement est le Test 2  ! 
;	Quelle est l’intérêt si l'on doit donner les valeur manuellement au constante ?
;	Essayé et dite moi si on peut le considérer comme un BUG !!


;	=======Test n° 1=========
;	Lancer la compil tel quel, le programme plante a la sortie de la 2ème fenétre !


Enumeration fenetre
#f1
EndEnumeration

Enumeration Gadgets
#f1Gadget1 
#f1Gadget2
#f1Gadget3
#f1Gadget4
#f1Gadget5
#f1Gadget6
EndEnumeration 	
 
 
;	=======Test n° 2=========
;	Commenter les énumération du test  1 (programme principal et module)
;	et décommenter les énumération du test 2, (programme principal et module)
;	et relancer la compil 


; Enumeration fenetre
; #f1 = 1
; EndEnumeration
; 
; Enumeration Gadgets
; #f1Gadget1 = 1
; #f1Gadget2
; #f1Gadget3
; #f1Gadget4
; #f1Gadget5
; #f1Gadget6
; EndEnumeration 

	
;Debug "La prochaine valeur d'énumération est : " + #PB_Compiler_EnumerationValue
;	Ici : Structure 
;	ici : Globale
;	Ici : Déclaration
;	Ici mes includes de mes modules 
;	XIncludeFile "xxxx... module   "

;====================================================
;====================================================
DeclareModule Patate
		;Toutes les Procedures déclarer ici seront accessible depuis l'extérieure du module !


;	Debug "La prochaine valeur d'énumération  = " + #PB_Compiler_EnumerationValue
;	Donne une valeur qui n'est pas reprise pour la énumération ????




;	=======Test n° 1=========
;	Lancer la compil tel quel, le programme plante a la sortie de la 2ème fenetre !


Enumeration Fenetres
#f2
EndEnumeration

Enumeration Gadgets
;#f2Gadget1 = #PB_Compiler_EnumerationValue		;	Ne marche pas !!!
#f2Gadget1 
#f2Gadget2
#f2Gadget3
#f2Gadget4
#f2Gadget5
#f2Gadget6
EndEnumeration 



;	=======Test n° 2=========
;	Commenter les énumération du test  1
;	et décommenter les énumération du test 2, y compris dans le programme principale
;	et lancer la compil 


; Enumeration Fenetres
; #f2 = 2
; EndEnumeration
; 
; Debug "La prochaine valeur d'énumération est : " + #PB_Compiler_EnumerationValue
; Enumeration Gadgets
; ;#f2Gadget1 = #PB_Compiler_EnumerationValue		;	Ne marche pas !!!
; #f2Gadget1 = 10
; #f2Gadget2
; #f2Gadget3
; #f2Gadget4
; #f2Gadget5
; #f2Gadget6
;  EndEnumeration 
 
 
 
Declare  Fenetre2()
		
EndDeclareModule

Module Patate

Procedure Fenetre2()


If OpenWindow(#f2, 400, 100, 300, 300, "PanelGadget", #PB_Window_SystemMenu) 
TextGadget(#f2Gadget1, 		20,   20, 130, 30, "Message  !")
StringGadget(#f2Gadget2, 	160, 20, 130, 30, "")
TextGadget(#f2Gadget3, 		20,  70, 130, 30, "Message !")
StringGadget(#f2Gadget4, 	160, 70, 130, 30, "")

ButtonGadget(#f2Gadget5, 45,   240, 80, 30,"FERMER")
ButtonGadget(#f2Gadget6, 170, 240, 80, 30,"QUITTER")

Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
         	Select EventGadget()
           	Case #f2Gadget5		:	 f2Quitter = 1
           	Case #f2Gadget6 		:	 f2Quitter = 1
         	EndSelect
            
Case #PB_Event_CloseWindow	:	 f2Quitter = 1

EndSelect
Until f2Quitter = 1
EndIf
CloseWindow(#f2)  
EndProcedure

	
EndModule

UseModule Patate

;====================================================
;====================================================

;	Mes procedures du programme principales

Procedure Affiche()

Debug "#f1Gadget1 = "+Str(#f1Gadget1)
Debug "#f1Gadget6 = "+Str(#f1Gadget6)

Debug "#f2Gadget1 = "+Str(#f2Gadget1)		
Debug "#f2Gadget6 = "+Str(#f2Gadget6)

EndProcedure

Procedure Fenetre1()
If OpenWindow(#f1, 50, 100, 300, 300, "PanelGadget", #PB_Window_SystemMenu ) 
PanelGadget     (#f1Gadget1, 10, 10, 280, 200)
		AddGadgetItem (#f1Gadget1, -1, "Onglet 1")
		FrameGadget	(#f1Gadget2,		0,		-7,		280,	180,	"")
		AddGadgetItem (#f1Gadget1, -1,"Onglet 2")
		FrameGadget	(#f1Gadget3,		0,		-7,		280,	180,	"")
		CloseGadgetList()

ButtonGadget(#f1Gadget5, 45,   240, 80, 30,"AFFICHE")
ButtonGadget(#f1Gadget6, 170, 240, 80, 30,"FENETRE 2")
EndIf
EndProcedure

;====================================================

Fenetre1()		;	Lancement du programme

Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
         	Select EventGadget()
           	Case #f1Gadget5	:	 Affiche()
           	Case #f1Gadget6 	:	Fenetre2();Patate::
         	EndSelect
            
Case #PB_Event_CloseWindow	:	 f1Quitter = 1

EndSelect
Until f1Quitter = 1

End
 




A+
Ulix

Re: Enumérations nommées et module

Publié : dim. 29/avr./2018 7:07
par Micoute
C'est normal puisque tu donnes toujours le même nom à tes gadgets, une énumération sert à donner des valeurs à des constantes qui sont nommées et dans tous les cas #f1Gadget1 aura toujours la même valeur, donc si l'énumération finit par #f1Gadget6, la suivante doit commencer par #f1Gadget7 etc...

Donc le bug se situe entre le chaise et le clavier, comme dit le bon John.

Re: Enumérations nommées et module

Publié : dim. 29/avr./2018 7:29
par Ulix
Non !!! je suis pas sûr que tu est tester ! :cry:

D'abord mes gadgets ne porte pas le même nom :
dans la première fenêtre les gadgets commence par #f1 et dans la 2ème ils commence par #f2 !

Ensuite l'énumération nommées est justement fait pour éviter que des gadgets ne porte le même numéro !

Donc mon propos est de démontrer que l'énumération ne marche pas ! A nom avis il s'agit là d'un BUG !

Le Test n°2 reproduit le bon comportement, seulement il faut tester ! :cry:


Petite note : "Donc le bug se situe entre le chaise et le clavier, comme dit le bon John."
Lui aussi n'a pas tester la dernière fois que j'ai posté !! :cry:

Re: Enumérations nommées et module

Publié : dim. 29/avr./2018 8:30
par Demivec
Exemple:

Code : Tout sélectionner

DeclareModule commun
  Enumeration fenetres 1
  EndEnumeration
  
  Enumeration Gadgets 1
  EndEnumeration
EndDeclareModule

Module commun
EndModule


UseModule commun
Enumeration fenetres
#f1
EndEnumeration

Enumeration Gadgets
#f1Gadget1 
#f1Gadget2
#f1Gadget3
#f1Gadget4
#f1Gadget5
#f1Gadget6
EndEnumeration    


;====================================================
;====================================================
DeclareModule Patate
      ;Toutes les Procedures déclarer ici seront accessible depuis l'extérieure du module !


UseModule commun
Enumeration fenetres
#f2
EndEnumeration

Enumeration Gadgets
#f2Gadget1 
#f2Gadget2
#f2Gadget3
#f2Gadget4
#f2Gadget5
#f2Gadget6
EndEnumeration 

Declare  Fenetre2()
      
EndDeclareModule

Module Patate

Procedure Fenetre2()


If OpenWindow(#f2, 400, 100, 300, 300, "PanelGadget", #PB_Window_SystemMenu) 
TextGadget(#f2Gadget1,       20,   20, 130, 30, "Message  !")
StringGadget(#f2Gadget2,    160, 20, 130, 30, "")
TextGadget(#f2Gadget3,       20,  70, 130, 30, "Message !")
StringGadget(#f2Gadget4,    160, 70, 130, 30, "")

ButtonGadget(#f2Gadget5, 45,   240, 80, 30,"FERMER")
ButtonGadget(#f2Gadget6, 170, 240, 80, 30,"QUITTER")

Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
            Select EventGadget()
              Case #f2Gadget5      :    f2Quitter = 1
              Case #f2Gadget6       :    f2Quitter = 1
            EndSelect
            
Case #PB_Event_CloseWindow   :    f2Quitter = 1

EndSelect
Until f2Quitter = 1
EndIf
CloseWindow(#f2)  
EndProcedure

   
EndModule

UseModule Patate

;====================================================
;====================================================

;   Mes procedures du programme principales

Procedure Affiche()

Debug "#f1Gadget1 = "+Str(#f1Gadget1)
Debug "#f1Gadget6 = "+Str(#f1Gadget6)

Debug "#f2Gadget1 = "+Str(#f2Gadget1)      
Debug "#f2Gadget6 = "+Str(#f2Gadget6)

EndProcedure

Procedure Fenetre1()
If OpenWindow(#f1, 50, 100, 300, 300, "PanelGadget", #PB_Window_SystemMenu ) 
PanelGadget     (#f1Gadget1, 10, 10, 280, 200)
      AddGadgetItem (#f1Gadget1, -1, "Onglet 1")
      FrameGadget   (#f1Gadget2,      0,      -7,      280,   180,   "")
      AddGadgetItem (#f1Gadget1, -1,"Onglet 2")
      FrameGadget   (#f1Gadget3,      0,      -7,      280,   180,   "")
      CloseGadgetList()

ButtonGadget(#f1Gadget5, 45,   240, 80, 30,"AFFICHE")
ButtonGadget(#f1Gadget6, 170, 240, 80, 30,"FENETRE 2")
EndIf
EndProcedure

;====================================================

Fenetre1()      ;   Lancement du programme

Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
            Select EventGadget()
              Case #f1Gadget5   :    Affiche()
              Case #f1Gadget6    :   Fenetre2();Patate::
            EndSelect
            
Case #PB_Event_CloseWindow   :    f1Quitter = 1

EndSelect
Until f1Quitter = 1

End

Re: Enumérations nommées et module

Publié : dim. 29/avr./2018 10:22
par MLD
Perso je n'utilise plus l'énumération automatique.
Dans des programmes complexes, ou il y a beaucoup de gadgets, cela devient vite ingérable. On ne sait plus vraiment quel numéro a un gadget donné.
ce qui est un peu frustrant pour faire des boucles de coloration de gadget par exemple.
en fait PB attribue a chaque gadget une constante un peu cachée.
Alors autant faire directement par exemple: #Bouton_1 = 10 : #Bouton_2 = 11 ect. Ce qui n'est pas beaucoup plus long que l'énumération, mais permet ensuite une utilisation beaucoup plus souple
des gadgets par leur numéro.
Ceci demande un peu plus d'organisation lors du projet de programme. expl prévoir les numéros de 5 a 20 pour les boutons, de 21 a 30 pour les strings etc.
Mais chacun fait comme il veut.

Re: Enumérations nommées et module

Publié : dim. 29/avr./2018 10:32
par GallyHC
Bonjour,

Qu'une enum soit dans le programme ou dans un module on en fait ce que l'on veut. Un exemple avec les constantes commençant à 100 et de 10 en 10.

Code : Tout sélectionner

Enumeration test 100 Step 10
  #a
  #b
  #c
  #d
EndEnumeration
  
Debug #a
Debug #b
Debug #c
Debug #d
Après dans un module j'utiliserais plus des "#PB_Any", car le but d'un module est d'être autonome, et avec des constantes en fixe, tu risque tôt ou tard avoir des problème de conflit.

Cordialement,
GallyHC

[Résolu]: Enumérations nommées et module

Publié : dim. 29/avr./2018 12:13
par Ulix
Merci pour vos réponses !

@Demivec
Effectivement le fait d'utilisé un module commun permet d'utilisé l'énumération nommées !

Je ne l'avais pas compris, l'aide de PB ne dit rien a se sujet (exemple de module,
avec les voitures n'est pas probant...) :cry:

Donc, merci Demivec, ton code d'exemple ! :P

Ulix