PureBasic

Forums PureBasic
Nous sommes le Jeu 22/Oct/2020 18:52

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 7 messages ] 
Auteur Message
 Sujet du message: [Résolu] Enumérations nommées et module
MessagePosté: Sam 28/Avr/2018 22:53 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 04/Juin/2004 14:27
Messages: 309
Localisation: Frontignan
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:


;   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


Dernière édition par Ulix le Dim 29/Avr/2018 12:14, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Enumérations nommées et module
MessagePosté: Dim 29/Avr/2018 7:07 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 02/Oct/2011 16:17
Messages: 2316
Localisation: 50200 Coutances
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.

_________________
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce GT 640 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.72 LTS
Un homme doit être poli, mais il doit aussi être libre !


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Enumérations nommées et module
MessagePosté: Dim 29/Avr/2018 7:29 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 04/Juin/2004 14:27
Messages: 309
Localisation: Frontignan
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:


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Enumérations nommées et module
MessagePosté: Dim 29/Avr/2018 8:30 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 18/Sep/2010 18:13
Messages: 81
Exemple:

Code:
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


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Enumérations nommées et module
MessagePosté: Dim 29/Avr/2018 10:22 
Hors ligne

Inscription: Jeu 05/Fév/2009 17:58
Messages: 980
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.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Enumérations nommées et module
MessagePosté: Dim 29/Avr/2018 10:32 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 17/Déc/2007 12:44
Messages: 1668
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:
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

_________________
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: [Résolu]: Enumérations nommées et module
MessagePosté: Dim 29/Avr/2018 12:13 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 04/Juin/2004 14:27
Messages: 309
Localisation: Frontignan
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


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 7 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Google [Bot] et 26 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye