J'essaye d'ouvrir plusieurs fenêtres, je crois donc qu'il faut une boucle d'evenement et un thread pour chacune ?
Seulement voici mon code, lorsque j'ouvre la deuxieme fenêtre (Menu Projet -> Nouvelle fenetre), j'ai des fois un "Invalid memory access" au niveau du WaitWindowEvent
De plus, quand j'arrive à ouvrir cette nouvelle fenêtre, lorsque je veux la fermer, c'est la toolbar qui se ferme et l'appli plante....
Est-ce que je procède de la bonne manière ?
(Je suis sur PB 4.51RC1 sur Mac)
Edit : si je compile avec l'option "Activer la gestion des thread" c'est encore pire...
Code : Tout sélectionner
Enumeration
#ToolBar
#Fenetre
EndEnumeration
Enumeration
#Menu
#MenuAffichageBoiteAOutils
#MenuProjet
#MenuProjetNouvelleFenetre
EndEnumeration
Enumeration
#Bouton
#BoutonImage
EndEnumeration
Procedure Fenetre (Param)
CloseFenetre.b
If OpenWindow (#Fenetre, 200, 100, 500, 500, "Nouvelle fenetre", #PB_Window_SystemMenu)
Repeat
EventFenetre = WaitWindowEvent ()
Select Event
Case #PB_Event_CloseWindow
CloseFenetre = 1
EndSelect
Until CloseFenetre = 1
CloseWindow (#Fenetre)
EndIf
EndProcedure
If OpenWindow (#ToolBar, 20, 100, 200, 300, "ToolBar", #PB_Window_Tool | #PB_Window_SystemMenu)
If CreateMenu (#Menu, WindowID(#ToolBar))
MenuTitle ("Affichage")
MenuItem (#MenuAffichageBoiteAOutils, "Boite à outils")
SetMenuItemState (#Menu, #MenuAffichageBoiteAOutils, 1)
MenuTitle ("Projet")
MenuItem (#MenuProjetNouvelleFenetre, "Nouvelle fenêtre")
EndIf
ButtonGadget(#Bouton, 10, 10, 150, 20, "Standard Button")
Resultat = LoadImage(1, "Images/Bouton.bmp")
If Resultat = 0
MessageRequester ("Erreur !", "Erreur !")
End
EndIf
ButtonImageGadget(#BoutonImage, 10, 50, 36, 36, ImageID(1))
Repeat
Event = WaitWindowEvent ()
Select Event
Case #PB_Event_Menu
Select EventMenu () ; To see which menu has been selected
Case #MenuAffichageBoiteAOutils ; Boite à outils
If GetMenuItemState (#Menu, #MenuAffichageBoiteAOutils) = 1
SetMenuItemState (#Menu, #MenuAffichageBoiteAOutils, 0)
Else
SetMenuItemState (#Menu, #MenuAffichageBoiteAOutils, 1)
EndIf
Case #MenuProjetNouvelleFenetre
CreateThread (@Fenetre(), 1)
Default
EndSelect
Case #PB_Event_CloseWindow
Quit = 1
EndSelect
Until Quit = 1
MessageRequester("Fin", "Fin")
EndIf