temps d'attente sur stringGadget

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
fab
Messages : 24
Inscription : jeu. 07/avr./2011 21:07
Localisation : Limoux, France

temps d'attente sur stringGadget

Message par fab »

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?
Mac Os X snow léopard, PureBasic 4.51
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: temps d'attente sur stringGadget

Message par falsam »

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%
Avatar de l’utilisateur
fab
Messages : 24
Inscription : jeu. 07/avr./2011 21:07
Localisation : Limoux, France

Re: temps d'attente sur stringGadget

Message par fab »

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 :

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
Avatar de l’utilisateur
fab
Messages : 24
Inscription : jeu. 07/avr./2011 21:07
Localisation : Limoux, France

Re: temps d'attente sur stringGadget

Message par fab »

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?

Image
Mac Os X snow léopard, PureBasic 4.51
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: temps d'attente sur stringGadget

Message par falsam »

fab a écrit :... il semblerai que ce soit bien le screen ...
Le screen qui tourne ? je ne comprends pas. Tu aurais la possibilité d'insérer ton code ?
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%
Avatar de l’utilisateur
case
Messages : 1545
Inscription : lun. 10/sept./2007 11:13

Re: temps d'attente sur stringGadget

Message par case »

as tu bien mis un waitwindowevent dans la boucle principale de ton programme ?
ImageImage
Avatar de l’utilisateur
fab
Messages : 24
Inscription : jeu. 07/avr./2011 21:07
Localisation : Limoux, France

Re: temps d'attente sur stringGadget

Message par fab »

Oui je vais essayer de mettre ce qui concerne cette partie :

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
le chargement de la fenêtre et du screen :

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))
Puis lorsque l'on clique sur le menu adéquate :

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
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: temps d'attente sur stringGadget

Message par falsam »

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%
Avatar de l’utilisateur
fab
Messages : 24
Inscription : jeu. 07/avr./2011 21:07
Localisation : Limoux, France

Re: temps d'attente sur stringGadget

Message par fab »

:x Ton code fonctionne et pas le miens je compare et ne comprends pas d'où ça peut venir :(
Mac Os X snow léopard, PureBasic 4.51
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: temps d'attente sur stringGadget

Message par falsam »

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%
Avatar de l’utilisateur
fab
Messages : 24
Inscription : jeu. 07/avr./2011 21:07
Localisation : Limoux, France

Re: temps d'attente sur stringGadget

Message par fab »

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
Avatar de l’utilisateur
fab
Messages : 24
Inscription : jeu. 07/avr./2011 21:07
Localisation : Limoux, France

Re: temps d'attente sur stringGadget

Message par fab »

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
Avatar de l’utilisateur
fab
Messages : 24
Inscription : jeu. 07/avr./2011 21:07
Localisation : Limoux, France

Re: temps d'attente sur stringGadget

Message par fab »

Bon apparemment voici le morceau de code qui génère cette latence :

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
Quelqu'un saurait il pourquoi? et comment y remédier?
Mac Os X snow léopard, PureBasic 4.51
Fred
Site Admin
Messages : 2805
Inscription : mer. 21/janv./2004 11:03

Re: temps d'attente sur stringGadget

Message par Fred »

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
Avatar de l’utilisateur
fab
Messages : 24
Inscription : jeu. 07/avr./2011 21:07
Localisation : Limoux, France

Re: temps d'attente sur stringGadget

Message par fab »

ok, merci
Mac Os X snow léopard, PureBasic 4.51
Répondre