Le code je l'avais modifié ainsi
Mais j'ai toujours un crash présent si je joue avec les clics sur ouvrir/fermer/ouvrir etc...
Mais je ne veux pas empiéter sur le topic de Philippe_GEORGES
Code : Tout sélectionner
; -----------------------------------
; - INITIALISATION -
; -----------------------------------
Enumeration Fenetres
#Fenetre1
#Fenetre2
EndEnumeration
Enumeration Gadgets
#BTouvrirFen1
#BTouvrirFen2
#BTfermerFen1
#BTfermerFen2
EndEnumeration
Declare OuvrirFenetre1()
Declare OuvrirFenetre2()
Global.b Fenetre1Ouverte = #False, Fenetre2Ouverte = #False , exit = 0
; -----------------------------------
; - PROCEDURES -
; -----------------------------------
Procedure OuvrirFenetre1()
If OpenWindow(#Fenetre1, 300, 150, 300, 600, "Fenetre 1", #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget)
ButtonGadget(#BTouvrirFen2, 10,10,100,30, "Ouvrir fen2")
ButtonGadget(#BTfermerFen1, 10,40,100,30, "Fermer moi")
Fenetre1Ouverte = #True
Debug "Fen ouverte 1 : " + Fenetre1Ouverte
If Fenetre2Ouverte = #True
DisableGadget(#BTouvrirFen2,1)
EndIf
ProcedureReturn Fenetre1Ouverte
EndIf
EndProcedure
Procedure OuvrirFenetre2()
If OpenWindow(#Fenetre2, WindowX(#Fenetre1)+302, WindowY(#Fenetre1), 300, 600, "Fenetre 2", #PB_Window_MaximizeGadget| #PB_Window_MinimizeGadget)
ButtonGadget(#BTouvrirFen1, 10,10,100,30, "Ouvrir fen1")
ButtonGadget(#BTfermerFen2, 10,40,100,30, "Ferme moi")
Fenetre2Ouverte = #True
Debug "Fen ouverte 2 : " + Fenetre2Ouverte
If Fenetre1Ouverte = #True
DisableGadget(#BTouvrirFen1,1)
EndIf
ProcedureReturn Fenetre2Ouverte
EndIf
EndProcedure
; -----------------------------------
; - PROGRAMME -
; -----------------------------------
OuvrirFenetre1()
Repeat
Event = WaitWindowEvent(20)
Fenetre = EventWindow()
Gadget = EventGadget()
TypeEvent = EventType()
Select Event
;Gestion des actions sur les gadgets
Case #PB_Event_Gadget
Select Gadget
Case #BTouvrirFen1
If Fenetre1Ouverte = #False
OuvrirFenetre1()
DisableGadget(#BTouvrirFen1,1)
Else
Debug "Fenêtre 1 déjà ouverte"
EndIf
Case #BTouvrirFen2
If Fenetre2Ouverte = #False
OuvrirFenetre2()
DisableGadget(#BTouvrirFen2,1)
Else
Debug "Fenêtre 2 déjà ouverte"
EndIf
Case #BTfermerFen1
Fenetre1Ouverte = #False
CloseWindow(#Fenetre1)
If Fenetre2Ouverte = #False
exit = 1
Else
DisableGadget(#BTouvrirFen1,0)
EndIf
Case #BTfermerFen2
Fenetre2Ouverte = #False
CloseWindow(#Fenetre2)
If Fenetre1Ouverte = #False
exit = 1
Else
DisableGadget(#BTouvrirFen2,0)
EndIf
EndSelect
;Gestion des actions si fermeture des fenêtres
Case #PB_Event_CloseWindow
Select Fenetre
Case #Fenetre1
Fenetre1Ouverte = #False
CloseWindow(#Fenetre1)
If Fenetre2Ouverte = #False
exit = 1
EndIf
Case #Fenetre2
Fenetre2Ouverte = #False
CloseWindow(#Fenetre2)
If Fenetre1Ouverte = #False
exit = 1
EndIf
EndSelect
EndSelect
Until exit = 1
End
T'es ; A ajouter ne le sont pas.
Une partie de la gestion des disable est géré dans les procedures
ça évide de DisableGadget(N,1) un gadget déjà disable
-----------------------------------------
Pour réponde à Philippe, concernant les enumération on peut voir que :
Code : Tout sélectionner
;V1
Enumeration WIN
#WIN0
#WIN1
EndEnumeration
Enumeration GAD
#G1
#G2
#G3
EndEnumeration
Enumeration Tim
#MonTimer1
#MonTimer2
EndEnumeration
Debug #WIN0
Debug #WIN1
Debug #G1
Debug #G2
Debug #G3
Debug #MonTimer1
Debug #MonTimer2
; on se retrouve avec : 0 1 - 0 1 2 et 0 1
;-------------------------------------------
;V2
Enumeration
#WIN00
#WIN11
EndEnumeration
Enumeration
#G11
#G22
#G33
EndEnumeration
Enumeration
#MonTimer11
#MonTimer22
EndEnumeration
Debug #WIN00
Debug #WIN11
Debug #G11
Debug #G22
Debug #G33
Debug #MonTimer11
Debug #MonTimer22
; Idem on se retrouve avec : 0 1 - 0 1 2 et 0 1
;-------------------------------------------
;V3
Enumeration
#WIN000
#WIN111
#G111
#G222
#G333
#MonTimer111
#MonTimer222
EndEnumeration
Debug #WIN000
Debug #WIN111
Debug #G111
Debug #G222
Debug #G333
Debug #MonTimer111
Debug #MonTimer222
; Idem on se retrouve avec : 0 1 2 3 4 5 6 (ce qui est OK)
;-------------------------------------------
;V4
Enumeration 0
#WIN0000
#WIN1111
EndEnumeration
Enumeration 5
#G1111
#G2222
#G3333
EndEnumeration
Enumeration 50
#MonTimer1111
#MonTimer2222
EndEnumeration
Debug #WIN0000
Debug #WIN1111
Debug #G1111
Debug #G2222
Debug #G3333
Debug #MonTimer1111
Debug #MonTimer2222
; on se retrouve avec : 0 1 5 6 7 50 51 (ce qui est OK aussi)
;-----------------------------------------------------------
Je ne suis pas adepte du #PB_ANY.
J'avoue que je préfère Enumeration NOMBRE lorsque j'ai de nombreux gadget.
Si je dois traiter une série de gadget (25 checkbox par exemple),
je préfère en amont les enumérer genre
Enumeration 100
#checkB1
#checkB2
#checkB3
etc..
Endenumeration
et de faire un For i = 100 to #checkB3 ....
Certains trouveront ça peut être crade mais ça fonctionne.