[RESOLU] probleme boucle

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Shade
Messages : 53
Inscription : sam. 05/juin/2010 15:40

[RESOLU] probleme boucle

Message par Shade »

Salut tous le monde
est oui encore moi lol j'ai un autre soucis que j'arrive pas a comprendre
dans mon logiciel j'ai ma fenêtre principal est pour l'instant juste 2 autre fenêtre qui s'ouvre en clic sur des menu.

1 fenêtre supplémentaire en plus de celle de la fenêtre principale marche nikel mais la 2 fenêtre que je voudrai ouvrir des que je fait appelle a la procedure des que je teste le logiciel elle s'ouvre en boucle

je vous mais le code ci-dessous

Mon Main

Code : Tout sélectionner

#Version_Main = 1
#Version_Logiciel = 0

;#####################
;## fichier inclus  ##
;#####################

IncludeFile "Fenetre_principal.pbf"
IncludeFile "New_vehicule.pbf"
IncludeFile "A_Propos.pbf"
IncludeFile "Variables.pb"
IncludeFile "Procedures.pb"


;###################
;## Debut du code ##
;###################

Debug "Version du fichier Main.pb = " + #Version_Main
Debug "Version du fichier Variables.pb = " + #Version_Variables
Debug "Version Du fichier Procedures.pb = " + #Version_Procedures
Debug "Version Actuel du logiciel = " + Version_L

OpenWindow_0()

SetGadgetText(#Txt_Version,Version_L)

langueDefault()
Debug langueDefault

Repeat
    Event = WaitWindowEvent()
    
    Select Event()

                
    EndSelect
    
    Select EventMenu()
        
      Case #MenuItem_2
        Fermeture_Logiciel()
        
      Case #MenuItem_12
        LangueSelect = "Francais"
        Langue()
        Charge_Langue()
        
      Case #MenuItem_8
        OpenWindow_1()
        
      Case #MenuItem_3
        ;IncludeFile "New_vehicule.pbf"
        OpenWindow_2()
        
      EndSelect
      
      Select EventGadget()
          
      Case #BT_NV_OK
        CloseWindow(#Window_1) 
          
      EndSelect
      
    
    
  Until Event = #PB_Event_CloseWindow ;
le code de la fenetre qui boucle au demarage du logiciel

Code : Tout sélectionner

Enumeration FormWindow
  #Window_2
EndEnumeration

Enumeration FormGadget
  #TXT_NV_1
  #BT_NV_Ajouter
  #BT_NV_Cancel
  #String_0
EndEnumeration


Procedure OpenWindow_2(x = 0, y = 0, width = 490, height = 130)
  OpenWindow(#Window_2, x, y, width, height, "Nouveau Vehicule", #PB_Window_SystemMenu)
  TextGadget(#TXT_NV_1, 20, 20, 450, 20, "")
  ButtonGadget(#BT_NV_Ajouter, 20, 80, 140, 30, "Ajouter")
  ButtonGadget(#BT_NV_Cancel, 180, 80, 160, 30, "Annuler")
  StringGadget(#String_0, 20, 50, 450, 20, "")
EndProcedure

Procedure Window_2_Events(event)
  Select event
    Case #PB_Event_CloseWindow
      ProcedureReturn #False

    Case #PB_Event_Menu
      Select EventMenu()
      EndSelect

    Case #PB_Event_Gadget
      Select EventGadget()
      EndSelect
  EndSelect
  ProcedureReturn #True
EndProcedure
Dernière modification par Shade le jeu. 26/sept./2019 8:58, modifié 1 fois.
Avatar de l’utilisateur
Naheulf
Messages : 193
Inscription : dim. 10/mars/2013 22:22
Localisation : France

Re: probleme boucle

Message par Naheulf »

Met déjà le « Select EventMenu()" dans un « Case #PB_Event_Menu » dans le « Select Event » (comme dans l’exemple dans la doc). C’est possible que, lors d’un évènement ultérieur, la procédure EventMenu() renvoie quelque chose qui se trouve correspondre à #MenuItem_3 alors qu’en fait il ne s’agisse même pas d’un évènement du menu…
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: probleme boucle

Message par Mesa »

Il faut utiliser la fonction EventWindow() pour gérer les évènements venant de plusieurs fenêtres:

Code : Tout sélectionner

Procedure OpenWindow_0()
  
  OpenWindow(0,0,0,500,500,"0")
  ;Menu
  If CreateMenu(0, WindowID(0))
    MenuTitle("Menu")
    MenuItem(1, "Ouvrir 1")
    MenuItem(2, "Fermer 1")
    MenuItem(3, "Quitter")
  EndIf
  
EndProcedure
Procedure OpenWindow_1() 
  
  OpenWindow(1,300,200,500,500,"1")
  
EndProcedure
Procedure Window_1_Events(event) 
  Select event 
    Case #PB_Event_CloseWindow 
      Debug "Fermeture de la fenêtre1"
      CloseWindow(1)
      ProcedureReturn #False 
      
    Case #PB_Event_Menu 
      Select EventMenu() 
      EndSelect 
      
    Case #PB_Event_Gadget 
      Select EventGadget() 
      EndSelect 
  EndSelect 
  ProcedureReturn #True 
EndProcedure	 

OpenWindow_0() 


; 1 seule boucle pour tout un programme
; et pourtant plusieurs fenêtres
Repeat 
  Event = WaitWindowEvent() 
  NumeroFenetre = EventWindow()
  
  Select NumeroFenetre
      
      ;Gestion des évènements venant de la fenêtre 0
      ;=============================================
    Case 0 
      Select Event 
        Case #PB_Event_CloseWindow
          End
          
        Case #PB_Event_Menu             
          Select EventMenu() 
            Case 1
              OpenWindow_1()    
            Case 2
              If IsWindow(1)
                CloseWindow(1)	
              EndIf
            Case 3 
              End        
          EndSelect 
          
        Case #PB_Event_Gadget
          Select EventGadget()     
          EndSelect 
      EndSelect
      
      ;Gestion des évènements venant de la fenêtre 1
      ;==============================================
    Case 1
      ok=Window_1_Events(event)
      Debug ok
  EndSelect
  
ForEver
M.
Shade
Messages : 53
Inscription : sam. 05/juin/2010 15:40

Re: probleme boucle

Message par Shade »

Salut Naheulf
ces exact je viens de m'en apercevoir y il a 1h est corriger l'erreur c’était bien cet erreur la
justement je venez mettre résolu est mettre le bout de code
je te remercie

voici le bout de code corrigé

Code : Tout sélectionner

Repeat
    Event = WaitWindowEvent()
    
    Select Event()
    
        Case #PB_Event_Menu
            
            Select EventMenu()        
              Case #MenuItem_2
                Fermeture_Logiciel()        
              Case #MenuItem_12
                LangueSelect = "Francais"
                Langue()
                Charge_Langue()        
              Case #MenuItem_8
                OpenWindow_1()        
              Case #MenuItem_3
                ;IncludeFile "New_vehicule.pbf"
                OpenWindow_2()
            EndSelect
            
      
        Case #PB_Event_Gadget
            
            Select EventGadget()          
              Case #BT_AP_OK
                CloseWindow(#Window_1)        
              Case #BT_NV_Cancel
                ;CloseWindow(#Window_2)        
              Case #BT_NV_Ajouter        
          
            EndSelect     
    
      EndSelect
  
  Until Event = #PB_Event_CloseWindow ;
Répondre