bug clavier ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: bug clavier ?

Message par Fig »

Version 5.45LTS et nous sommes en 2017, le bug de la touche M en français existe toujours et je viens de me le prendre dans la tête.
C'est franchement décou-rageant. :(
Je vais pas vous mentir, ça me fout vraiment les boules.... Je dois tout refaire en Querty et émuler le Fr ? Pffff

Fred... Allez quoi... :?

edit: Une solution possible par Falsam
https://www.purebasic.fr/french/viewtop ... hilit=chat
Dernière modification par Fig le dim. 31/mars/2019 9:13, modifié 1 fois.
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: bug clavier ?

Message par falsam »

Fig a écrit :Fred... Allez quoi...
Il me semble qu'il a fait depuis ..... longtemps:

:wink: KeyboardMode(#PB_Keyboard_International)

Code : Tout sélectionner

InitSprite()
InitKeyboard()
InitMouse()

OpenWindow(0, 0, 0, 0, 0, "FullScreen", #PB_Window_BorderLess | #PB_Window_Maximize)
OpenWindowedScreen(WindowID(0), 0, 0, WindowWidth(0), WindowHeight(0))

KeyboardMode(#PB_Keyboard_International)

Repeat
Repeat : Until WindowEvent() = 0

ClearScreen(RGB(75, 0, 130))
ExamineKeyboard()

If KeyboardReleased(#PB_Key_M)
  Debug "Touche M"
EndIf


FlipBuffers()

Until KeyboardReleased(#PB_Key_Escape)
Si je presse la touche M j'ai bien un ... M :wink:
Configuration : Windows 11 Famille 64-bit - PB 6.03 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
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: bug clavier ?

Message par Fig »

Toujours buggé, désolé...
mM correspond à 2 codes... et ",?" aucun.

Code : Tout sélectionner

;- *** ENUMERATION ***


;- *** VARIABLES AND CONSTANTS ***
#MAIN_GAMEWINDOW_WIDTH=1024
#MAIN_GAMEWINDOW_HEIGHT=768

;- *** PROCEDURES ***
Procedure GetKeyboard()
  ExamineKeyboard()
  
  If KeyboardReleased(#PB_Key_Escape)
    End
  EndIf
  
EndProcedure


Procedure GetKeyboardScanCode()
  Protected i.l
  
  For i=0 To 255
    ExamineKeyboard()
    If KeyboardPushed(i)
      Debug i
    EndIf
    
  Next
  
EndProcedure

;- *** INIT PROCEDURE ***

InitSprite()
InitKeyboard()
InitMouse()

OpenWindow(0,0,0,#MAIN_GAMEWINDOW_WIDTH,#MAIN_GAMEWINDOW_HEIGHT,"test Keyboard",#PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget)
OpenWindowedScreen(WindowID(0),0,0,#MAIN_GAMEWINDOW_WIDTH,#MAIN_GAMEWINDOW_HEIGHT,1,0,0)

KeyboardMode(#PB_Keyboard_International)

;-  *** MAIN LOOP ***
Repeat
  Select WindowEvent()
    Case #PB_Event_CloseWindow
      End
  EndSelect
  
  GetKeyboardScanCode()
  
  FlipBuffers()
  ClearScreen($000000)

  GetKeyboard()
  
ForEver
Dernière modification par Fig le sam. 19/août/2017 19:52, modifié 1 fois.
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: bug clavier ?

Message par falsam »

Toujours buggé, désolé...
Avec KeyboardPushed() effectivement mais pas avec KeyboardReleased()

J'ai oublié de tester avec KeyboardPushed() !! C'est ballot ce bug !!
Configuration : Windows 11 Famille 64-bit - PB 6.03 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
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: bug clavier ?

Message par Fig »

Essais de tester la touche ",?" Elle n'existe pas car elle a été mappé avec le M.

La touche M correspond au code de la touche M et de la touche ,?
Donc quand tu teste juste le M forcément ça marche...
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: bug clavier ?

Message par falsam »

D’après ce que j'ai pu lire sur le forum anglophone, tu veux te lancer dans ton propre GUI 2D.

A mon avis les fonctions KeyboardPushed() et KeyboardReleased() ne sont l'idéales pour la saisie d'un string.

Ces deux fonctionnalités sont parfaites pour des actions. Exemple : Esc pour sortir d'un jeu.

Tu peux aussi te servir de KeyboardReleased(#PB_Key_Return) pour par exemple valider une zone de saisie.

La zone de saisie je préconiserais plutot le fonction KeyboardInkey().
Configuration : Windows 11 Famille 64-bit - PB 6.03 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
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: bug clavier ?

Message par Fig »

KeyboardInkey() ne permet pas d'obtenir le comportement qu'on a quand on tape naturellement sous windows. (il enregistre les released des touches, donc on ne peut l'utiliser pour obtenir les répétitions quand on laisse une touche appuyée par exemple. Ca se ressent aussi quand on utilise shift+un symbol. Exemple typique le '?' qui ne fonctionne pas à chaque fois)

Ce programme fonctionne par contre parfaitement (même si il manque encore les accents qui complètent les lettres... Je vais compléter) et permet d'émuler toute sorte de claviers.
Je vais m'en faire une petite Dll.
Après si tu as une proposition plus simple avec keyboarInkey() et équivalente en confort d'utilisation, je suis bien sûr, preneur. :wink:

Code : Tout sélectionner

Xres=1024:yRes=600
TimeRepeat.i=250
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0:MessageRequester("Error", "Can't open the sprite system", 0):End:EndIf
If OpenWindow(0, 0, 0,Xres, Yres, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)=0:MessageRequester("Error", "Can't open windowed screen!", 0):EndIf
If OpenWindowedScreen(WindowID(0), 0, 0, xres, yres, 0, 0, 0)=0:MessageRequester("Error", "Can't open windowed screen!", 0):EndIf    
KeyboardMode(#PB_Keyboard_Qwerty)
Structure symbols
   key.s[3] ;lowercase 0, uppercase 1 and Alt 2
   prevCar.s
   timer.d
   flag.a
EndStructure

NewList key.i()
NewMap symbols.symbols()
Restore Keys
For i=1 To 65
   AddElement(key())
   Read.i key()
Next i

Restore Azerty
ForEach key()
   Read.s symbols(Str(key()))\key[0];lowercase
   Read.s symbols(Str(key()))\key[1];uppercase
   Read.s symbols(Str(key()))\key[2];AltGr
Next

DataSection
   Keys:
   ;10
   Data.i #PB_Key_1,#PB_Key_2,#PB_Key_3,#PB_Key_4,#PB_Key_5,#PB_Key_6,#PB_Key_7,#PB_Key_8,#PB_Key_9,#PB_Key_0
   ;Pad 14
   Data.i #PB_Key_Pad1,#PB_Key_Pad2,#PB_Key_Pad3,#PB_Key_Pad4,#PB_Key_Pad5,#PB_Key_Pad6,#PB_Key_Pad7,#PB_Key_Pad8,#PB_Key_Pad9,#PB_Key_Pad0
   Data.i #PB_Key_Divide,#PB_Key_Multiply,#PB_Key_Subtract,#PB_Key_Add
   ;letters 26
   Data.i #PB_Key_A,#PB_Key_B,#PB_Key_C,#PB_Key_D,#PB_Key_E,#PB_Key_F,#PB_Key_G,#PB_Key_H,#PB_Key_I,#PB_Key_J
   Data.i #PB_Key_K,#PB_Key_L,#PB_Key_M,#PB_Key_N,#PB_Key_O,#PB_Key_P,#PB_Key_Q,#PB_Key_R,#PB_Key_S,#PB_Key_T
   Data.i #PB_Key_U,#PB_Key_V,#PB_Key_W,#PB_Key_X,#PB_Key_Y,#PB_Key_Z
   ;space
   Data.i #PB_Key_Space
   ;back
   Data.i #PB_Key_Back
   ;48
   ;punctuation
   Data.i #PB_Key_SemiColon,#PB_Key_Comma
   Data.i #PB_Key_Period,#PB_Key_Slash
   Data.i #PB_Key_Apostrophe,#PB_Key_BackSlash,#PB_Key_LeftBracket,#PB_Key_RightBracket
   Data.i #PB_Key_Minus,#PB_Key_Equals
   Data.i #PB_Key_Grave
   Data.i #PB_Key_Decimal,86
   ;total 55
   Azerty: ;French keyboard 
   Data.s "&","1","","é","2","~",Chr(34),"3","#","'","4","{","(","5","[","-","6","|","è","7","`","_","8","\","ç","9","^","à","0","@"
   Data.s "1","1","","2","2","","3","3","","4","4","","5","5","","6","6","","7","7","","8","8","","9","9","","0","0",""
   Data.s "/","/","","*","*","","-","-","","+","+",""
   Data.s "q","Q","","b","B","","c","C","","d","D","","e","E","€","f","F","","g","G","","h","H","","i","I","","j","J",""
   Data.s "k","K","","l","L","",",","?","","n","N","","o","O","","p","P","","a","A","","r","R","","s","S","","t","T",""
   Data.s "u","U","","v","V","","z","Z","","x","X","","y","Y","","w","W",""
   Data.s " "," ",""
   Data.s Chr(1),Chr(1),""
   Data.s "m","M","",";",".","",":","/","","!","§",""
   Data.s "ù","%","","*","µ",""
   Data.s "^","¨","","$","£","¤"
   Data.s ")","°","]","=","+","}"
   Data.s "²","",""
   Data.s ".",".",""
   Data.s "<",">",""
   
   Qwerty: ;US keyboard
;    Data.s "1","!","","2","@","","3","#","","4","$","","5","%","","6","^","","7","&","","8","*","","9","(","","0",")",""
;    Data.s "1","1","","2","2","","3","3","","4","4","","5","5","","6","6","","7","7","","8","8","","9","9","","0","0",""
;    Data.s "/","/","","*","*","","-","-","","+","+",""
;    Data.s "a","A","","b","B","","c","C","","d","D","","e","E","","f","F","","g","G","","h","H","","i","I","","j","J",""
;    Data.s "k","K","","l","L","","m","M","","n","N","","o","O","","p","P","","q","Q","","r","R","","s","S","","t","T",""
;    Data.s "u","U","","v","V","","w","W","","x","X","","y","Y","","z","Z",""
;    Data.s " "," ",""
;    Data.s Chr(1),Chr(1),""
;    Data.s ";",":","",",","<","",".",">","","/","?",""
;    Data.s "'",chr(34),"","\","|",""
;    Data.s"[","{","","]","}",""
;    Data.s "-","_","","=","+",""
;    Data.s "`","~","" 
;    Data.s ".",".",""
;    Data.s "","",""
EndDataSection   

Repeat
   FlipBuffers()
   ClearScreen(#Black)
   Repeat:Event = WindowEvent():Until Event = 0   
   ExamineKeyboard()
   
   shift.i=0
   If KeyboardReleased(#PB_Key_Capital)
      CapsLock.i=~CapsLock
   EndIf
   If KeyboardPushed(#PB_Key_PadEnter) Or KeyboardPushed(#PB_Key_Return)
      text$+Chr(13)
   EndIf
   If KeyboardPushed(#PB_Key_LeftShift) Or KeyboardPushed(#PB_Key_RightShift) Or CapsLock
      shift=1
   EndIf
   If KeyboardPushed(#PB_Key_RightAlt)
      shift=2
   EndIf   
   ForEach key()
      If KeyboardPushed(key())
         symbols.s=symbols(Str(key()))\key[shift]
         ;upcase
         If symbols()\timer<ElapsedMilliseconds()
            If symbols()\prevCar=symbols
               If symbols()\flag=0
                  symbols()\flag=1
                  symbols()\timer=TimeRepeat+ElapsedMilliseconds()
               Else   
                  symbols()\timer=0
                  If symbols=Chr(1) ;back
                     text$ = Left(text$, Len(text$)-1)
                  Else
                     text$+symbols
                  EndIf
                  symbols()\prevCar=symbols
               EndIf
            Else
               symbols()\flag=0
               If symbols=Chr(1) ;back
                  text$ = Left(text$, Len(text$)-1)
               Else
                  text$+symbols
               EndIf
               symbols()\prevCar=symbols
            EndIf
         EndIf
      Else
         symbols(Str(key()))\prevCar="":symbols()\timer=0
      EndIf
   Next
   
   StartDrawing(ScreenOutput())
   DrawText(0,0,"Type your text...   [Escape] To quit")
   DrawText(0,40,text$)
   StopDrawing()
Until KeyboardPushed(#PB_Key_Escape)
Dernière modification par Fig le lun. 21/août/2017 16:36, modifié 3 fois.
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: bug clavier ?

Message par falsam »

..... donc on ne peut l'utiliser pour obtenir les répétitions
Tu crois que cette répétition est utile pour un GUI ? Pour saisir un pseudo par exemple je n'ai pas besoin de répéter x fois un caractère. De plus si un utilisateur à le doigt un peu lourd et un pc très rapide ça peut devenir désagréable.

Sinon ton code est pas mal :wink:
Configuration : Windows 11 Famille 64-bit - PB 6.03 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
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: bug clavier ?

Message par djes »

Pousse ta boucle jusqu'à 3727 (comme je l'avais déjà dit plus haut), la touche correspond au code 1216... En tous cas le bug (?) est présent et c'est bizarre qu'il ne soit pas corrigé ou expliqué/contourné.
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: bug clavier ?

Message par Fig »

Falsam> Je n'en ai pas besoin pour saisir un pseudo mais pour un chat ingame.
Chatter avec la lourdeur de keyboardInkey, j'ai essayé, c'est hyper pénible. L'utilisateur a la sensation diffuse d'être entravé et mal à l'aise...
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: bug clavier ?

Message par Fig »

djes a écrit :Pousse ta boucle jusqu'à 3727 (comme je l'avais déjà dit plus haut), la touche correspond au code 1216... En tous cas le bug (?) est présent et c'est bizarre qu'il ne soit pas corrigé ou expliqué/contourné.
J'imagine que Fred a moins de temps à consacrer pour la correction des bugs (il est papa non ?) et les bugs spécifiquement français... Vu qu'ils sont répertoriés sur le forum anglais...
De toute manière maintenant que je me suis fait ch*er à émuler le clavier FR avec le clavier US. Ca restera comme ça. Ca me permettra de compléter avec un clavier Espagnol, Allemand ou Russe, pourquoi pas...
C'est utile pour quelqu'un qui fait un jeu à vocation internationale. :lol: :roll:

1216, je le note dans la carte du clavier. Merci beaucoup pour l'info, dans le fil je n'avais pas vu que c'était la réponse... (je crois toujours que c'est 42...)
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: bug clavier ?

Message par falsam »

Fig a écrit :Chatter avec la lourdeur de keyboardInkey, j'ai essayé, c'est hyper pénible. L'utilisateur a la sensation diffuse d'être entravé et mal à l'aise...
Tu as raison. Il y a un temps de latence entre chaque caractère un peu pénible. D'ou cette sensation de mal à l'aise.

/me va penser à une autre solution (Voir même il a une idée)
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: bug clavier ?

Message par Ollivier »

Ce n'est pas un temps de latence : c'est programmé au front descendant.
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: bug clavier ?

Message par falsam »

Ollivier a écrit :Ce n'est pas un temps de latence : c'est programmé au front descendant.
Certes mais c'est comme ça que je le ressens. On a l'impression que le clavier est deux de tension :mrgreen:
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Répondre