temps d'attente sur stringGadget
temps d'attente sur stringGadget
Bonjour,
ma première application purebasic avance tranquillement mais je me heurte à un nouveau "probleme" depuis une fenêtre j'ouvre uns seconde fenêtre dans laquelle se trouve un stringGadget (2 en fait) et lorsque je tape quelque chose au clavier rien n'apparait dedans.
Après plusieurs essais je me rends compte qu' il ne saisi les caractères que si l'on reste appuyé sur la touche et du coup on se retrouve avec des 'ttttttt' dans le stringGadget.
J'ai donc effectué un essais avec un inputRequester et je me retrouve avec le même soucis, un temps mort avant la "captation" du clavier.
Il semblerait que la présence d'un screen dans la fenêtre principale en soit la cause mais pas sur.
L'un de vous connaitrait il une solution à ce problème?
ma première application purebasic avance tranquillement mais je me heurte à un nouveau "probleme" depuis une fenêtre j'ouvre uns seconde fenêtre dans laquelle se trouve un stringGadget (2 en fait) et lorsque je tape quelque chose au clavier rien n'apparait dedans.
Après plusieurs essais je me rends compte qu' il ne saisi les caractères que si l'on reste appuyé sur la touche et du coup on se retrouve avec des 'ttttttt' dans le stringGadget.
J'ai donc effectué un essais avec un inputRequester et je me retrouve avec le même soucis, un temps mort avant la "captation" du clavier.
Il semblerait que la présence d'un screen dans la fenêtre principale en soit la cause mais pas sur.
L'un de vous connaitrait il une solution à ce problème?
Mac Os X snow léopard, PureBasic 4.51
- falsam
- Messages : 7317
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: temps d'attente sur stringGadget
Pourrais tu tester ce code ?
Code : Tout sélectionner
Enumeration
#Window1
#Bouton1
#Window2
#String1
#String2
EndEnumeration
Procedure OuvreWindow1()
OpenWindow(#Window1,0,0,800,600,"1er fenetre",#PB_Window_ScreenCentered | #PB_Window_SystemMenu)
ButtonGadget(#Bouton1,600,20,100,20,"Ouvre Window2")
EndProcedure
Procedure OuvreWindow2()
OpenWindow(#Window2,0,0,400,300,"1er fenetre",#PB_Window_ScreenCentered | #PB_Window_SystemMenu)
StringGadget(#String1,10,20,100,20,"")
StringGadget(#String2,10,40,100,20,"")
EndProcedure
OuvreWindow1()
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #Bouton1
OuvreWindow2()
SetActiveGadget(#String1)
EndSelect
Case #PB_Event_CloseWindow
Select EventWindow() ;Quelle fenetre reçoit l'évenement
Case Window1
End
Case #Window2
CloseWindow(#Window2)
EndSelect
EndSelect
ForEver
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: temps d'attente sur stringGadget
Testé et ça marche impécable, est ce qu'il est possible que le fait qu'il y ai un screen derrière puisse être la cause du problème? car si je charge une fenêtre avec un string gadget sans le screen je n'ai aucun soucis.
voici le code de ma fenetre :
voici le code de ma fenetre :
Code : Tout sélectionner
Procedure showConnectionForm()
If OpenWindow(#Window_3, 0, 0, 200, 200, "Connection", #PB_Window_ScreenCentered | #PB_Window_Tool) = 0
MessageRequester("Erreur", "Erreur showConnectionForm")
EndIf
StringGadget(#Pseudo_User_0, 25, 25, 150, 25, "pseudo")
StringGadget(#Pseudo_Password_0, 25, 75, 150, 25, "",#PB_String_Password)
ButtonGadget(#Connecter_Connecter_0, 25, 115, 150, 25, "Se connecter")
ButtonGadget(#Fermer_Connecter_0, 25, 150, 150, 25, "Fermer")
EndProcedure
Mac Os X snow léopard, PureBasic 4.51
Re: temps d'attente sur stringGadget
Après plusieurs tests il semblerai que ce soit bien le screen qui tourne dans la fenêtre principale qui génère ce problème en effet lorsque je le supprime tout marche comme il faut.
L'un d'entre vous à t il déjà essayer ce que j'essais et comment à t il fait pour que cela fonctionne svp?

L'un d'entre vous à t il déjà essayer ce que j'essais et comment à t il fait pour que cela fonctionne svp?

Mac Os X snow léopard, PureBasic 4.51
- falsam
- Messages : 7317
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: temps d'attente sur stringGadget
Le screen qui tourne ? je ne comprends pas. Tu aurais la possibilité d'insérer ton code ?fab a écrit :... il semblerai que ce soit bien le screen ...
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: temps d'attente sur stringGadget
as tu bien mis un waitwindowevent dans la boucle principale de ton programme ?
Re: temps d'attente sur stringGadget
Oui je vais essayer de mettre ce qui concerne cette partie :
le fichier principal :
le chargement de la fenêtre et du screen :
Puis lorsque l'on clique sur le menu adéquate :
le fichier principal :
Code : Tout sélectionner
init()
menu()
main()
End
Procedure main()
Repeat
;Récupération des évènements de fenêtre
event=WaitWindowEvent()
parseEvent(event)
parsekeyboardEvent()
dessine()
FlipBuffers()
Until event=#PB_Event_CloseWindow
EndProcedure
Code : Tout sélectionner
;Ouverture de la fenetre principale
If OpenWindow(#Window_0,0,0,800, 600,"Drastal Online 3",#PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_Minimize) = 0
MessageRequester("Erreur open window", "Impossible d'accéder à DirectX 7 ou supérieur", 0);
End
EndIf
;Chargement de l'écran de jeu
OpenWindowedScreen(WindowID(#Window_0), 25, 25, 750, 550, 1, 25, 25)
SetFrameRate(60)
ClearScreen(RGB(255, 255, 255))
Code : Tout sélectionner
Procedure showConnectionForm()
If OpenWindow(#Window_3, 0, 0, 200, 200, "Connection", #PB_Window_ScreenCentered | #PB_Window_Tool) = 0
MessageRequester("Erreur", "Erreur showConnectionForm")
EndIf
StringGadget(#Pseudo_User_0, 25, 25, 150, 25, "pseudo")
StringGadget(#Pseudo_Password_0, 25, 75, 150, 25, "",#PB_String_Password)
ButtonGadget(#Connecter_Connecter_0, 25, 115, 150, 25, "Se connecter")
ButtonGadget(#Fermer_Connecter_0, 25, 150, 150, 25, "Fermer")
EndProcedure
Mac Os X snow léopard, PureBasic 4.51
- falsam
- Messages : 7317
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: temps d'attente sur stringGadget
Code : Tout sélectionner
Enumeration
#Window_1
#Window_3
#Pseudo_User_0
#Pseudo_Password_0
#Connecter_Connecter_0
#Fermer_Connecter_0
EndEnumeration
Procedure Init()
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
MessageRequester("Error", "Can't open the sprite system", 0)
End
EndIf
EndProcedure
Procedure OuvreWindow_1()
OpenWindow(#Window_1,0,0,800,600,"1er fenetre",#PB_Window_ScreenCentered | #PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(#Window_1), 25, 25, 750, 550, 1, 25, 25)
SetFrameRate(60)
ClearScreen(RGB(255, 255, 255))
EndProcedure
Procedure OuvreWindow_3()
OpenWindow(#Window_3, 0, 0, 200, 200, "Connection",#PB_Window_ScreenCentered | #PB_Window_ScreenCentered | #PB_Window_Tool, WindowID(#Window_1))
StringGadget(#Pseudo_User_0, 25, 25, 150, 25, "pseudo")
StringGadget(#Pseudo_Password_0, 25, 75, 150, 25, "",#PB_String_Password)
ButtonGadget(#Connecter_Connecter_0, 25, 115, 150, 25, "Se connecter")
ButtonGadget(#Fermer_Connecter_0, 25, 150, 150, 25, "Fermer")
SetActiveGadget(#Pseudo_User_0)
EndProcedure
Init()
OuvreWindow_1()
OuvreWindow_3()
Repeat
Select WindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #Fermer_Connecter_0
End
EndSelect
Case #PB_Event_CloseWindow
Select EventWindow() ;Quelle fenetre reçoit l'évenement
Case Window_1, Window_2
End
Case #Window_3
CloseWindow(#Window_3)
EndSelect
EndSelect
; Début gestion du jeu
;Inverse le buffer d'arrière plan avec le buffer visible à l'écran.
;La partie invisible du buffer remplace alors complètement La partie visible.
FlipBuffers()
;Efface l'écran courant avec la couleur specifiée.
ClearScreen(RGB(190, 246, 65))
ForEver
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: temps d'attente sur stringGadget


Mac Os X snow léopard, PureBasic 4.51
- falsam
- Messages : 7317
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: temps d'attente sur stringGadget
Enleve #PB_Window_Minimize de ta fenêtre principale.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: temps d'attente sur stringGadget
Oui c'est un truc que j'ai mis récemment pour tester je suis en train de repasser tout mon code en revu voir ce qui pourrais créer cette latence et tant qu'à y être la fonction SetActiveGadget n'a non plus aucun effet sur cette fenêtre doit y avoir un truc autre par qui créé le conflit.
Mac Os X snow léopard, PureBasic 4.51
Re: temps d'attente sur stringGadget
Je viens de compiler sous windows et mon application marche sans soucis donc apparemment mon code foire seulement sous mac os
Mac Os X snow léopard, PureBasic 4.51
Re: temps d'attente sur stringGadget
Bon apparemment voici le morceau de code qui génère cette latence :
Quelqu'un saurait il pourquoi? et comment y remédier?
Code : Tout sélectionner
Procedure parseKeyboardEvent()
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Left)
Player\positionX - Player\speed
Player\spriteNumber+1
If Player\spriteNumber>2
Player\spriteNumber = 0
EndIf
Player\sprite = Player\spriteNumber*25
ClearScreen(RGB(255, 255, 255))
ClipSprite(#player_0,Player\sprite,100,25,35)
DisplayTransparentSprite(#player_0,Player\positionX,Player\positionY)
EndIf
If KeyboardPushed(#PB_Key_Right)
Player\positionX + Player\speed
Player\spriteNumber+1
If Player\spriteNumber>2
Player\spriteNumber = 0
EndIf
Player\sprite = Player\spriteNumber*25
ClearScreen(RGB(255, 255, 255))
ClipSprite(#player_0,Player\sprite,34,25,35)
DisplayTransparentSprite(#player_0,Player\positionX,Player\positionY)
EndIf
If KeyboardPushed(#PB_Key_Up)
Player\positionY - Player\speed
Player\spriteNumber+1
If Player\spriteNumber>2
Player\spriteNumber = 0
EndIf
Player\sprite = Player\spriteNumber*25
ClearScreen(RGB(255, 255, 255))
ClipSprite(#player_0,Player\sprite,0,25,35)
DisplayTransparentSprite(#player_0,Player\positionX,Player\positionY)
EndIf
If KeyboardPushed(#PB_Key_Down)
Player\positionY + Player\speed
Player\spriteNumber+1
If Player\spriteNumber>2
Player\spriteNumber = 0
EndIf
Player\sprite = Player\spriteNumber*25
ClearScreen(RGB(255, 255, 255))
ClipSprite(#player_0,Player\sprite,65,25,35)
DisplayTransparentSprite(#player_0,Player\positionX,Player\positionY)
EndIf
EndProcedure
Mac Os X snow léopard, PureBasic 4.51
Re: temps d'attente sur stringGadget
Il faut vider la queue des evennements à chaque boucle, sinon ca va prendre un temps fou pour avoir ton evennement clavier. Pseudo code:
Code : Tout sélectionner
Repeat
Repeat
Event = WindowEvent()
; Traite tours les evennements
Until Event = 0
FlipBuffer()
Forever