comment gérer correctement les evenements d'une fenetre3D et ceux d'une fenetre dans la meme boucle?
Dans l'exemple suivant, j'ouvre une 1ere fenetre qui contient un trackbar, et un string qui affiche la valeur du trackbar.
(NB: les evenements de cette fenetre ne sont pas gérés pour simplifier l'exemple)
J'ouvre ensuite une 2eme fenetre avec un trackbar qui agit sur la meme valeur.
En cas d'evenement dans cette 2eme fenetre, les 2 gadgets de la 1ere fenetre sont mis a jour.
J'ouvre ensuite une 3eme fenetre, avec un windowedscreen et une fenetre3D.
Déjà, on voit que les gadgets des 2 1eres fenetres ne s'affichent pas tant qu'il n'y a pas une action dans la 3eme fenetre.
Dans cette fenetre3D, le clic souris agit egalement sur la meme valeur, et les evenements doivent mettre a jour les autres gadgets pour que l'état soit cohérent entre les 3 fenetres.
Problème: les trackbar sont bien mis a jour, mais le string ne se rafraichit pas.
???
Si la fenetre3D lache le focus (touche TAB), le string se rafraichit.
Code : Tout sélectionner
Global Window_0, Window_1
Global TrackBar_0, String_0
Global TrackBar_1
Global TrackBar_2
If InitEngine3D()=0
MessageRequester("Error", "The 3D Engine can't be initialized", 0)
End
EndIf
Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/GUI", #PB_3DArchive_FileSystem)
InitSprite()
InitKeyboard()
InitMouse()
Procedure OpenWindow_0(x = 0, y = 0, width = 350, height = 220)
Window_0 = OpenWindow(#PB_Any, x, y, width, height, "", #PB_Window_SystemMenu)
TrackBar_0 = TrackBarGadget(#PB_Any, 30, 30, 280, 40, 0, 100)
String_0 = StringGadget(#PB_Any, 70, 110, 180, 30, "")
EndProcedure
Procedure OpenWindow_1(x = 400, y = 0, width = 350, height = 220)
Window_1 = OpenWindow(#PB_Any, x, y, width, height, "", #PB_Window_SystemMenu)
TrackBar_1 = TrackBarGadget(#PB_Any, 30, 30, 280, 40, 0, 100)
EndProcedure
Procedure OpenWindow_2(x = 800, y = 0, width = 350, height = 220)
Window_2 = OpenWindow(#PB_Any, x, y, width, height, "", #PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(Window_2), 0, 0, width, height, 0, 0, 0)
CreateCamera(0, 0, 0, 100, 100) ; Front camera
MoveCamera(0,0,100,100, #PB_Absolute)
WindowGUI=OpenWindow3D(#PB_Any, 10, 10, 340, 200, "trackbar")
ShowGUI(0, 1) ;Hide the GUI, display the mouse cursor
EndProcedure
Procedure Window_1_Events(event)
tbval.i = GetGadgetState(TrackBar_1)
SetGadgetState(TrackBar_0,tbval)
SetGadgetText(String_0,StrU(tbval))
EndProcedure
OpenWindow_0()
OpenWindow_1()
OpenWindow_2()
Repeat
; capture events
Event = WindowEvent()
EventWindow = EventWindow()
; manage events
If EventWindow = Window_1
Window_1_Events(Event)
EndIf
If ExamineMouse()
InputEvent3D(MouseX(), MouseY(), MouseButton(#PB_MouseButton_Left))
EndIf
If MouseButton(#PB_MouseButton_Left)
shininess=(GetGadgetState(TrackBar_1)+1)%80
SetGadgetText(String_0,StrU(shininess))
SetGadgetState(TrackBar_0,shininess)
SetGadgetState(TrackBar_1,shininess)
EndIf
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_Tab)
SetActiveWindow(Window_1)
EndIf
EndIf
RenderWorld()
FlipBuffers()
Until Event = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)