Page 1 sur 2

bug clavier ?

Publié : sam. 26/mars/2011 20:42
par case
bug avec le clavier ?

essayez la touche "," a coté de la touche N

le programme est decoupé en 4 parties on passe d'une partie a l'autre en appuyant sur 'escape'.

la premiere teste les touches du clavier a l'aide d'une boucle avec le mode 'qwerty' par defaut dans pb la touche "," fonctionne lorsqu'on appuie dessus la fenetre flash rouge

la seconde teste les touches du clavier a l'aide d'une boucle avec le mode #PB_Keyboard_International donc avec les touches du clavier français pour moi , cette touche ne réponds pas
toute les autres font flasher la fenêtre en bleu sauf celle ci

la troisième teste les touches du clavier avec #pb_key_all au lieu d'une boucle la touche fonctionne et fait bien flasher l’écran en magenta ...

la dernière partie utilise une boucle pour tester toute les touches du clavier mais permet les touches systemes (KeyboardMode(#PB_Keyboard_International|#PB_Keyboard_AllowSystemKeys)) la touche ',' fonctionne.

quelqu'un confirme ? j'ai posté un rapport de bug sur le forum anglais .


Code : Tout sélectionner

InitKeyboard()
main=OpenWindow(#PB_Any,0,0,640,200,"test",#PB_Window_ScreenCentered)
InitSprite()
OpenWindowedScreen(WindowID(main),0,0,640,200,0,0,0)
KeyboardMode(#PB_Keyboard_Qwerty)
Repeat
  ExamineKeyboard()
  ClearScreen(0)   
  For a=1 To 256
    If KeyboardPushed(a)
      ClearScreen($0000ff)
    EndIf
  Next
  StartDrawing(ScreenOutput())
  DrawText(0,0,"qwerty keyboard")
  DrawText(0,16,"press the key next to N")
  DrawText(0,32,"press escape to change keyboard mode")
  StopDrawing()
  FlipBuffers()
  WaitWindowEvent(0)
Until KeyboardPushed(#PB_Key_Escape)
Repeat
  ExamineKeyboard()
Until KeyboardReleased(#PB_Key_Escape)
KeyboardMode(#PB_Keyboard_International)
Repeat
  ExamineKeyboard()
  ClearScreen(0) 
  For a=1 To 256
    If KeyboardPushed(a)
      ClearScreen($ff0000)
    EndIf 
  Next
  StartDrawing(ScreenOutput())
  DrawText(0,0,"international keyboard")
  DrawText(0,16,"press the key next to N")
  DrawText(0,32,"the key is not tested this is not a special key in my country layout (FR)")
  DrawText(0,48,"press escape to change keyboard mode")
  StopDrawing() 
  FlipBuffers()
  WaitWindowEvent(0)
Until KeyboardPushed(#PB_Key_Escape)
Repeat
  ExamineKeyboard()
Until KeyboardReleased(#PB_Key_Escape)
Repeat
  ExamineKeyboard()
  ClearScreen(0) 
  ;For a=1 To 256
    If KeyboardPushed(#PB_Key_All)
      ClearScreen($ff00ff)
    EndIf 
  ;Next
  StartDrawing(ScreenOutput())
  DrawText(0,0,"international keyboard")
  DrawText(0,16,"press the key next to N")
  DrawText(0,32,"the key works when using #pb_all to chek the keydown")
  DrawText(0,48,"press escape to change keyboard mode")
  StopDrawing() 
  FlipBuffers()
  WaitWindowEvent(0)
Until KeyboardPushed(#PB_Key_Escape)
KeyboardMode(#PB_Keyboard_International|#PB_Keyboard_AllowSystemKeys)
Repeat
  ExamineKeyboard()
  ClearScreen(0) 
  For a=1 To 256
    If KeyboardPushed(a)
      ClearScreen($00ff00)
    EndIf 
  Next
  StartDrawing(ScreenOutput())
  DrawText(0,0,"#PB_Keyboard_International|#PB_Keyboard_AllowSystemKeys")
    DrawText(0,16,"press the key next to N")
  DrawText(0,32,"the key is tested but special keys are activated so may cause bugs")
  DrawText(0,48,"press escape to change keyboard mode") 
  StopDrawing() 
  FlipBuffers()
  WaitWindowEvent(0)
Until KeyboardPushed(#PB_Key_Escape)

Re: bug clavier ?

Publié : lun. 28/mars/2011 16:54
par Fig
Oui, déja remarqué. Je ne me sert pas de cette touche, c'est tout. Si tu trouve une réponse, je suis preneur.

Re: bug clavier ?

Publié : lun. 28/mars/2011 18:09
par djes
Je confirme aussi, sauf en mode debug où aucune touche ne fonctionne sur le premier écran. A noter que le WaitWindowEvent() ne sert à rien, et que le KeyboardPushed() semble accepter jusqu'à 3727 chez moi :!: :?:

Re: bug clavier ?

Publié : lun. 28/mars/2011 18:20
par case
ne pas s'en servir est une chose mais que faire si on permet de redéfinir les touches ? ça peut être problématique..
bon en tout cas j'espère que ce sera fixé un jour :) cela touche t'il uniquement le clavier fr ou les autres aussi ?

Re: bug clavier ?

Publié : mer. 30/mars/2011 0:24
par case
mon essai a gérer le clavier... windows uniquement utilise les API.

Code : Tout sélectionner

; +--------------------------------------+
; |   code par case @ purebasic forums   |
; |   case[at]moonshade.org              |
; +--------------------------------------+
; |                                      |
; |     procedures  d'interrogation      |
; |              clavier                 |
; |                                      |
; +--------------------------------------+
; |                                      |
; |    PROCEDURES ET DOCUMENTATION       |
; |                                      |
; +--------------------------------------+
; |   RefreshKeyboard()                  |
; |   *****************                  |
; |   Récupere l'etat du clavier         |
; |   equivalent d'examinedesktop()      |
; |                                      |
; |   returnchar(key)                    |
; |   ***************                    |
; |   renvoi le caractere ascii de la    |
; |   touche 'key'                       |
; |                                      |
; |   Keydown(key)                       |
; |   ************                       |
; |   renvoi 1 si la touche est enfoncee |
; |                                      |
; |   Keyup(key)                         |
; |   **********                         |
; |   renvoi 1 si la touche est relachée |
; |                                      |
; |   keypushed(key)                     |
; |   **************                     |
; |   renvoi 1 si la touche est appuyée  |
; |   mais ne l'etait pas avant          |
; |                                      |
; |   keyon(key)                         |
; |   **********                         |
; |   renvoi 1 si al touche est allumée  |
; |   numlock par exemple                |
; |                                      |
; +--------------------------------------+


InitSprite()
ExamineDesktops()
main=OpenWindow(#PB_Any,0,0,DesktopWidth(0),DesktopHeight(0),"",#PB_Window_BorderLess)
OpenWindowedScreen(WindowID(main),0,0,DesktopWidth(0),DesktopHeight(0),0,0,0)
;
;
;
;
; les deux lignes suivantes sont inutiles mais permettent de bloquer les touches menu de windows.
;
;
;
;
;
InitKeyboard()
KeyboardMode(#PB_Keyboard_International) 
;+--------------------------------------+
;|           BUFFERS CLAVIER            |
;+--------------------------------------+
Global *buffer=AllocateMemory(256)
Global *state=AllocateMemory(256)
;+--------------------------------------+
;|  CONSTANTES DEFINITION DES TOUCHES   |
;+--------------------------------------+
#AltKey_windows         =91
#AltKey_Shift           =16
#AltKey_LeftShift       =160
#AltKey_RightShift      =161
#AltKey_Alt             =17
#AltKey_Left_Alt        =164
#AltKey_AltGr           =165
#AltKey_Esc             =27 
#AltKey_tilde           =222
#AltKey_F1              =112
#AltKey_F2              =113
#AltKey_F3              =114
#AltKey_F4              =115
#AltKey_F5              =116
#AltKey_F6              =117
#AltKey_F7              =118
#AltKey_F8              =119
#AltKey_F9              =120
#AltKey_F10             =121
#AltKey_F11             =122
#AltKey_F12             =123
#AltKey_0               =48
#AltKey_1               =49
#AltKey_2               =50
#AltKey_3               =51
#AltKey_4               =52
#AltKey_5               =53
#AltKey_6               =54
#AltKey_7               =55
#AltKey_8               =56
#AltKey_9               =57  
#AltKey_parenthese      =219  
#AltKey_egal            =187
#AltKey_backspace       =8
#AltKey_windows         =91
#AltKey_Tab             =9
#AltKey_A               =65
#AltKey_B               =66
#AltKey_C               =67
#AltKey_D               =68
#AltKey_E               =69
#AltKey_F               =70
#AltKey_G               =71
#AltKey_H               =72
#AltKey_I               =73
#AltKey_J               =74
#AltKey_K               =75
#AltKey_L               =76
#AltKey_M               =77
#AltKey_N               =78
#AltKey_O               =79
#AltKey_P               =80
#AltKey_Q               =81
#AltKey_R               =82
#AltKey_S               =83
#AltKey_T               =84
#AltKey_U               =85
#AltKey_V               =86
#AltKey_W               =87
#AltKey_X               =88
#AltKey_Y               =89
#AltKey_Z               =90
#AltKey_circ            =221
#AltKey_dollar          =186
#AltKey_return          =13
#AltKey_caps            =20
#AltKey_percent         =192
#AltKey_multiply        =220
#AltKey_compare         =226
#AltKey_space          =32
#altKey_left           =37
#altKey_up             =38
#altKey_right          =39
#altKey_down           =40
#AltKey_del             =46
#AltKey_pageup          =33
#altKey_pagedown        =34
#altKey_fin             =35
#altKey_debut           =36
#AltKey_inser           =45
#AltKey_prtscr          =44
#AltKey_pause           =19
#AltKey_mute            =173
#AltKey_voldwn          =174
#AltKey_volup           =175
#AltKey_numlock         =144
#AltKey_0num            =96
#AltKey_1num            =97
#AltKey_2num            =98
#AltKey_3num            =99
#AltKey_4num            =100
#AltKey_5num            =101
#AltKey_6num            =102
#AltKey_7num            =103
#AltKey_8num            =104
#AltKey_9num            =105
Procedure RefreshKeyboard()          ;rafraichis l'etat du clavier
  CopyMemory(*buffer,*state,256)      ; sauvegarde l'etat precedent pour comparaison (keyup) 
  GetKeyboardState_(*buffer)          
EndProcedure
Procedure.s returnchar(key)          ; renvoi le caractere saisi
  r.s=Space(4)
  ToAscii_(key,0,*buffer,@r,0)  
  ProcedureReturn r
EndProcedure
Procedure Keydown(key)               ; teste si une touche est enfoncée (continue)
  If PeekB(*buffer+key)<0
    ProcedureReturn 1
  EndIf
EndProcedure
Procedure keyup(key)                 ; teste si une touche est lachée
  If PeekB(*buffer+key)>=0 And PeekB(*state+key)<0
    RefreshKeyboard()                 ;rafraichis le clavier pour eviter un clic fantome
    ProcedureReturn 1
  EndIf
EndProcedure
Procedure keypushed(key)             ; teste si une touche est poussée (instant)
  If PeekB(*buffer+key)<0 And PeekB(*state+key)>=0
    RefreshKeyboard()                    ;rafraichis le clavier pour eviter un clic fantome
    ProcedureReturn 1
  EndIf
EndProcedure
Procedure keyon(key)                 ; teste si une touche  est 'on' ver maj, num lock etc... 
  ProcedureReturn PeekB(*buffer+key) &%00000001;1  
EndProcedure
;
;
;
;
;
;
; exemple d'utilisation
;
;
;
;
;
;
;
Repeat
  ClearScreen(0)
  RefreshKeyboard()
  StartDrawing(ScreenOutput())
  b=0
  For y=0 To 15
    For x=0 To 15
      If Keydown(b)
        col=$0000ff
      Else 
        col=$ff00ff
      EndIf
      DrawText(x*100+40,y*20,Chr(MapVirtualKeyEx_(b,2,0)),$00ff00)    
      DrawText(x*100+56,y*20,returnchar(b),$00ffff)                
      DrawText(x*100,y*20,"["+RSet(Str(b),3,"0")+"]",col)
      b+1
    Next
  Next
  If keydown(#AltKey_circ)    
    Debug returnchar(#AltKey_circ)
  EndIf
  If keyup(#AltKey_return)
    Debug "released"
  EndIf
  If keyon(#AltKey_numlock)
    Debug "numlock"
  EndIf
  If keypushed(#AltKey_return)
    Debug "touche #AltKey_return pushed "
  EndIf
    If Keydown(#AltKey_del)
    Debug "touche del down "
  EndIf
  StopDrawing()
  FlipBuffers()
  WaitWindowEvent(0)
Until keydown(#AltKey_Esc)

Re: bug clavier ?

Publié : lun. 26/sept./2011 9:36
par jem
Bonjour,

Desoler du up, mais je confirme le bug présent dans la version 4.51 et également 4.60 RC1.
Facilement mis en évidence avec le code suivant :

en mode KeyboardMode(#PB_Keyboard_International) la touche "?" ( a droite de "N" ) d'un clavier Azerty ne renvoi aucun ScanCode.
Alors que la Touche "M" renvoi 2 ScanCode : 39 et 50 . Le bon Scancode devrait être uniquement 50 pour la touche M.

commenter la ligne KeyboardMode(#PB_Keyboard_International), pour passer en mode QWERTY ( US ) par defaut, le probleme n'existe plus, la touche "?" envoi le code 50 ( corespondant au M que un clavier QWERTY) et la touche "M" le code 39.

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
Je m'en vais tenter de trouver ton rapport de Bug et de faire un UP du post.
Cela me semble être un probleme assez génant.

Re: bug clavier ?

Publié : lun. 26/sept./2011 10:09
par Backup
...............

Re: bug clavier ?

Publié : lun. 26/sept./2011 10:28
par jem
merci Dobro pour ton code , ça peut vraiement aider à contourner le problème et c'est tout à fait fonctionnel.

Maintenant il vaudrait mieux que le soucis soit corrigé à la "source". Il ne me semble pas normal que la pression d'un touche clavier genère 2 Scancode. Le probleme vient bien du compilateur PureBasic, ou me trompe-je ?

Dans mon cas, je me suis rendu compte du probleme en modifiant la librairie fournit par WanabePhoenix.de et son SGX GUI qui semble assez intérrésant et facile à mettre en oeuvre :
En rajoutant la gestion d'un clavier AZERTY à son code ( si ca peut aider ci dessous mes rajouts à son code "keyboardEdit.pbi" )

Code : Tout sélectionner


        ;{ ---------- define table 1 - azerty / french
        ;sgx_keyLay(2)         pbid                       ---    chr[0] / mode 0 / normal       ---  chr[1] / mode 1 / shift          ---  chr[2] / mode 2 / alt-gr
        
        sgx_keyLay(2)\key[000]\pbid=#PB_Key_1             :::  sgx_keyLay(2)\key[000]\chr[0] = "&"  :::  sgx_keyLay(2)\key[000]\chr[1] = "1"  :::  sgx_keyLay(2)\key[000]\chr[2] = ""
        sgx_keyLay(2)\key[001]\pbid=#PB_Key_2             :::  sgx_keyLay(2)\key[001]\chr[0] = "é"  :::  sgx_keyLay(2)\key[001]\chr[1] = "2"  :::  sgx_keyLay(2)\key[001]\chr[2] = "~"
        sgx_keyLay(2)\key[002]\pbid=#PB_Key_3             :::  sgx_keyLay(2)\key[002]\chr[0]=Chr(34):::  sgx_keyLay(2)\key[002]\chr[1] = "3"  :::  sgx_keyLay(2)\key[002]\chr[2] = "#"
        sgx_keyLay(2)\key[003]\pbid=#PB_Key_4             :::  sgx_keyLay(2)\key[003]\chr[0] = "'"  :::  sgx_keyLay(2)\key[003]\chr[1] = "4"  :::  sgx_keyLay(2)\key[003]\chr[2] = "{"
        sgx_keyLay(2)\key[004]\pbid=#PB_Key_5             :::  sgx_keyLay(2)\key[004]\chr[0] = "("  :::  sgx_keyLay(2)\key[004]\chr[1] = "5"  :::  sgx_keyLay(2)\key[004]\chr[2] = "["
        sgx_keyLay(2)\key[005]\pbid=#PB_Key_6             :::  sgx_keyLay(2)\key[005]\chr[0] = "-"  :::  sgx_keyLay(2)\key[005]\chr[1] = "6"  :::  sgx_keyLay(2)\key[005]\chr[2] = "|"
        sgx_keyLay(2)\key[006]\pbid=#PB_Key_7             :::  sgx_keyLay(2)\key[006]\chr[0] = "è"  :::  sgx_keyLay(2)\key[006]\chr[1] = "7"  :::  sgx_keyLay(2)\key[006]\chr[2] = "`"
        sgx_keyLay(2)\key[007]\pbid=#PB_Key_8             :::  sgx_keyLay(2)\key[007]\chr[0] = "_"  :::  sgx_keyLay(2)\key[007]\chr[1] = "8"  :::  sgx_keyLay(2)\key[007]\chr[2] = "\"
        sgx_keyLay(2)\key[008]\pbid=#PB_Key_9             :::  sgx_keyLay(2)\key[008]\chr[0] = "ç"  :::  sgx_keyLay(2)\key[008]\chr[1] = "9"  :::  sgx_keyLay(2)\key[008]\chr[2] = "^"
        sgx_keyLay(2)\key[009]\pbid=#PB_Key_0             :::  sgx_keyLay(2)\key[009]\chr[0] = "à"  :::  sgx_keyLay(2)\key[009]\chr[1] = "0"  :::  sgx_keyLay(2)\key[009]\chr[2] = "@"
        
        sgx_keyLay(2)\key[010]\pbid=#PB_Key_A             :::  sgx_keyLay(2)\key[010]\chr[0] = "a"  :::  sgx_keyLay(2)\key[010]\chr[1] = "A"  :::  sgx_keyLay(2)\key[010]\chr[2] = ""
        sgx_keyLay(2)\key[011]\pbid=#PB_Key_B             :::  sgx_keyLay(2)\key[011]\chr[0] = "b"  :::  sgx_keyLay(2)\key[011]\chr[1] = "B"  :::  sgx_keyLay(2)\key[011]\chr[2] = ""
        sgx_keyLay(2)\key[012]\pbid=#PB_Key_C             :::  sgx_keyLay(2)\key[012]\chr[0] = "c"  :::  sgx_keyLay(2)\key[012]\chr[1] = "C"  :::  sgx_keyLay(2)\key[012]\chr[2] = ""
        sgx_keyLay(2)\key[013]\pbid=#PB_Key_D             :::  sgx_keyLay(2)\key[013]\chr[0] = "d"  :::  sgx_keyLay(2)\key[013]\chr[1] = "D"  :::  sgx_keyLay(2)\key[013]\chr[2] = ""
        sgx_keyLay(2)\key[014]\pbid=#PB_Key_E             :::  sgx_keyLay(2)\key[014]\chr[0] = "e"  :::  sgx_keyLay(2)\key[014]\chr[1] = "E"  :::  sgx_keyLay(2)\key[014]\chr[2] = "€"
        sgx_keyLay(2)\key[015]\pbid=#PB_Key_F             :::  sgx_keyLay(2)\key[015]\chr[0] = "f"  :::  sgx_keyLay(2)\key[015]\chr[1] = "F"  :::  sgx_keyLay(2)\key[015]\chr[2] = ""
        sgx_keyLay(2)\key[016]\pbid=#PB_Key_G             :::  sgx_keyLay(2)\key[016]\chr[0] = "g"  :::  sgx_keyLay(2)\key[016]\chr[1] = "G"  :::  sgx_keyLay(2)\key[016]\chr[2] = ""
        sgx_keyLay(2)\key[017]\pbid=#PB_Key_H             :::  sgx_keyLay(2)\key[017]\chr[0] = "h"  :::  sgx_keyLay(2)\key[017]\chr[1] = "H"  :::  sgx_keyLay(2)\key[017]\chr[2] = ""
        sgx_keyLay(2)\key[018]\pbid=#PB_Key_I             :::  sgx_keyLay(2)\key[018]\chr[0] = "i"  :::  sgx_keyLay(2)\key[018]\chr[1] = "I"  :::  sgx_keyLay(2)\key[018]\chr[2] = ""
        sgx_keyLay(2)\key[019]\pbid=#PB_Key_J             :::  sgx_keyLay(2)\key[019]\chr[0] = "j"  :::  sgx_keyLay(2)\key[019]\chr[1] = "J"  :::  sgx_keyLay(2)\key[019]\chr[2] = ""
        sgx_keyLay(2)\key[020]\pbid=#PB_Key_K             :::  sgx_keyLay(2)\key[020]\chr[0] = "k"  :::  sgx_keyLay(2)\key[020]\chr[1] = "K"  :::  sgx_keyLay(2)\key[020]\chr[2] = ""
        sgx_keyLay(2)\key[021]\pbid=#PB_Key_L             :::  sgx_keyLay(2)\key[021]\chr[0] = "l"  :::  sgx_keyLay(2)\key[021]\chr[1] = "L"  :::  sgx_keyLay(2)\key[021]\chr[2] = ""
        sgx_keyLay(2)\key[022]\pbid=#PB_Key_M             :::  sgx_keyLay(2)\key[022]\chr[0] = "m"  :::  sgx_keyLay(2)\key[022]\chr[1] = "M"  :::  sgx_keyLay(2)\key[022]\chr[2] = ""
        sgx_keyLay(2)\key[023]\pbid=#PB_Key_N             :::  sgx_keyLay(2)\key[023]\chr[0] = "n"  :::  sgx_keyLay(2)\key[023]\chr[1] = "N"  :::  sgx_keyLay(2)\key[023]\chr[2] = ""
        sgx_keyLay(2)\key[024]\pbid=#PB_Key_O             :::  sgx_keyLay(2)\key[024]\chr[0] = "o"  :::  sgx_keyLay(2)\key[024]\chr[1] = "O"  :::  sgx_keyLay(2)\key[024]\chr[2] = ""
        sgx_keyLay(2)\key[025]\pbid=#PB_Key_P             :::  sgx_keyLay(2)\key[025]\chr[0] = "p"  :::  sgx_keyLay(2)\key[025]\chr[1] = "P"  :::  sgx_keyLay(2)\key[025]\chr[2] = ""
        sgx_keyLay(2)\key[026]\pbid=#PB_Key_Q             :::  sgx_keyLay(2)\key[026]\chr[0] = "q"  :::  sgx_keyLay(2)\key[026]\chr[1] = "Q"  :::  sgx_keyLay(2)\key[026]\chr[2] = ""
        sgx_keyLay(2)\key[027]\pbid=#PB_Key_R             :::  sgx_keyLay(2)\key[027]\chr[0] = "r"  :::  sgx_keyLay(2)\key[027]\chr[1] = "R"  :::  sgx_keyLay(2)\key[027]\chr[2] = ""
        sgx_keyLay(2)\key[028]\pbid=#PB_Key_S             :::  sgx_keyLay(2)\key[028]\chr[0] = "s"  :::  sgx_keyLay(2)\key[028]\chr[1] = "S"  :::  sgx_keyLay(2)\key[028]\chr[2] = ""
        sgx_keyLay(2)\key[029]\pbid=#PB_Key_T             :::  sgx_keyLay(2)\key[029]\chr[0] = "t"  :::  sgx_keyLay(2)\key[029]\chr[1] = "T"  :::  sgx_keyLay(2)\key[029]\chr[2] = ""
        sgx_keyLay(2)\key[030]\pbid=#PB_Key_U             :::  sgx_keyLay(2)\key[030]\chr[0] = "u"  :::  sgx_keyLay(2)\key[030]\chr[1] = "U"  :::  sgx_keyLay(2)\key[030]\chr[2] = ""
        sgx_keyLay(2)\key[031]\pbid=#PB_Key_V             :::  sgx_keyLay(2)\key[031]\chr[0] = "v"  :::  sgx_keyLay(2)\key[031]\chr[1] = "V"  :::  sgx_keyLay(2)\key[031]\chr[2] = ""
        sgx_keyLay(2)\key[032]\pbid=#PB_Key_W             :::  sgx_keyLay(2)\key[032]\chr[0] = "w"  :::  sgx_keyLay(2)\key[032]\chr[1] = "W"  :::  sgx_keyLay(2)\key[032]\chr[2] = ""
        sgx_keyLay(2)\key[033]\pbid=#PB_Key_X             :::  sgx_keyLay(2)\key[033]\chr[0] = "x"  :::  sgx_keyLay(2)\key[033]\chr[1] = "X"  :::  sgx_keyLay(2)\key[033]\chr[2] = ""
        sgx_keyLay(2)\key[034]\pbid=#PB_Key_Y             :::  sgx_keyLay(2)\key[034]\chr[0] = "y"  :::  sgx_keyLay(2)\key[034]\chr[1] = "Y"  :::  sgx_keyLay(2)\key[034]\chr[2] = ""
        sgx_keyLay(2)\key[035]\pbid=#PB_Key_Z             :::  sgx_keyLay(2)\key[035]\chr[0] = "z"  :::  sgx_keyLay(2)\key[035]\chr[1] = "Z"  :::  sgx_keyLay(2)\key[035]\chr[2] = ""
        
        sgx_keyLay(2)\key[036]\pbid=#PB_Key_Escape        :::  sgx_keyLay(2)\key[036]\chr[0] = ""   :::  sgx_keyLay(2)\key[036]\chr[1] = ""   :::  sgx_keyLay(2)\key[036]\chr[2] = ""
        sgx_keyLay(2)\key[037]\pbid=#PB_Key_Minus         :::  sgx_keyLay(2)\key[037]\chr[0] = ")"  :::  sgx_keyLay(2)\key[037]\chr[1] = "°"  :::  sgx_keyLay(2)\key[037]\chr[2] = "]"
        sgx_keyLay(2)\key[038]\pbid=#PB_Key_Equals        :::  sgx_keyLay(2)\key[038]\chr[0] = "="  :::  sgx_keyLay(2)\key[038]\chr[1] = "+"  :::  sgx_keyLay(2)\key[038]\chr[2] = "}"
        sgx_keyLay(2)\key[039]\pbid=#PB_Key_Back          :::  sgx_keyLay(2)\key[039]\chr[0] = ""   :::  sgx_keyLay(2)\key[039]\chr[1] = ""   :::  sgx_keyLay(2)\key[039]\chr[2] = ""
        sgx_keyLay(2)\key[040]\pbid=#PB_Key_Tab           :::  sgx_keyLay(2)\key[040]\chr[0] = ""   :::  sgx_keyLay(2)\key[040]\chr[1] = ""   :::  sgx_keyLay(2)\key[040]\chr[2] = ""
        sgx_keyLay(2)\key[041]\pbid=#PB_Key_LeftBracket   :::  sgx_keyLay(2)\key[041]\chr[0] = "^"  :::  sgx_keyLay(2)\key[041]\chr[1] = "¨"  :::  sgx_keyLay(2)\key[041]\chr[2] = ""
        sgx_keyLay(2)\key[042]\pbid=#PB_Key_RightBracket  :::  sgx_keyLay(2)\key[042]\chr[0] = "$"  :::  sgx_keyLay(2)\key[042]\chr[1] = "£"  :::  sgx_keyLay(2)\key[042]\chr[2] = "¤"
        sgx_keyLay(2)\key[043]\pbid=#PB_Key_Return        :::  sgx_keyLay(2)\key[043]\chr[0] = ""   :::  sgx_keyLay(2)\key[043]\chr[1] = ""   :::  sgx_keyLay(2)\key[043]\chr[2] = ""
        sgx_keyLay(2)\key[044]\pbid=#PB_Key_LeftControl   :::  sgx_keyLay(2)\key[044]\chr[0] = ""   :::  sgx_keyLay(2)\key[044]\chr[1] = ""   :::  sgx_keyLay(2)\key[044]\chr[2] = ""
        sgx_keyLay(2)\key[045]\pbid=#PB_Key_SemiColon     :::  sgx_keyLay(2)\key[045]\chr[0] = ""   :::  sgx_keyLay(2)\key[045]\chr[1] = ""   :::  sgx_keyLay(2)\key[045]\chr[2] = "" ;==> BUG AZERTY -- ScanCode 39 assigné également à la touche M d'un clavier Azerty
        sgx_keyLay(2)\key[046]\pbid=#PB_Key_Apostrophe    :::  sgx_keyLay(2)\key[046]\chr[0] = "ù"  :::  sgx_keyLay(2)\key[046]\chr[1] = "%"  :::  sgx_keyLay(2)\key[046]\chr[2] = ""
        sgx_keyLay(2)\key[047]\pbid=#PB_Key_Grave         :::  sgx_keyLay(2)\key[047]\chr[0] = "²"  :::  sgx_keyLay(2)\key[047]\chr[1] = ""   :::  sgx_keyLay(2)\key[047]\chr[2] = ""
        sgx_keyLay(2)\key[048]\pbid=#PB_Key_LeftShift     :::  sgx_keyLay(2)\key[048]\chr[0] = ""   :::  sgx_keyLay(2)\key[048]\chr[1] = ""   :::  sgx_keyLay(2)\key[048]\chr[2] = ""
        sgx_keyLay(2)\key[049]\pbid=#PB_Key_BackSlash     :::  sgx_keyLay(2)\key[049]\chr[0] = "*"   :::  sgx_keyLay(2)\key[049]\chr[1] = "µ"   :::  sgx_keyLay(2)\key[049]\chr[2] = ""
        sgx_keyLay(2)\key[050]\pbid=#PB_Key_Comma         :::  sgx_keyLay(2)\key[050]\chr[0] = ";"  :::  sgx_keyLay(2)\key[050]\chr[1] = "."  :::  sgx_keyLay(2)\key[050]\chr[2] = ""
        sgx_keyLay(2)\key[051]\pbid=#PB_Key_Period        :::  sgx_keyLay(2)\key[051]\chr[0] = ":"  :::  sgx_keyLay(2)\key[051]\chr[1] = "/"  :::  sgx_keyLay(2)\key[051]\chr[2] = ""
        sgx_keyLay(2)\key[052]\pbid=#PB_Key_Slash         :::  sgx_keyLay(2)\key[052]\chr[0] = "!"  :::  sgx_keyLay(2)\key[052]\chr[1] = "§"  :::  sgx_keyLay(2)\key[052]\chr[2] = ""
        sgx_keyLay(2)\key[053]\pbid=#PB_Key_RightShift    :::  sgx_keyLay(2)\key[053]\chr[0] = ""   :::  sgx_keyLay(2)\key[053]\chr[1] = ""   :::  sgx_keyLay(2)\key[053]\chr[2] = ""
        sgx_keyLay(2)\key[054]\pbid=#PB_Key_Multiply      :::  sgx_keyLay(2)\key[054]\chr[0] = "*"  :::  sgx_keyLay(2)\key[054]\chr[1] = "*"  :::  sgx_keyLay(2)\key[054]\chr[2] = ""
        sgx_keyLay(2)\key[055]\pbid=#PB_Key_LeftAlt       :::  sgx_keyLay(2)\key[055]\chr[0] = ""   :::  sgx_keyLay(2)\key[055]\chr[1] = ""   :::  sgx_keyLay(2)\key[055]\chr[2] = ""
        sgx_keyLay(2)\key[056]\pbid=#PB_Key_Space         :::  sgx_keyLay(2)\key[056]\chr[0] = " "  :::  sgx_keyLay(2)\key[056]\chr[1] = " "  :::  sgx_keyLay(2)\key[056]\chr[2] = ""
        sgx_keyLay(2)\key[057]\pbid=#PB_Key_Capital       :::  sgx_keyLay(2)\key[057]\chr[0] = ""   :::  sgx_keyLay(2)\key[057]\chr[1] = ""   :::  sgx_keyLay(2)\key[057]\chr[2] = ""
        
        sgx_keyLay(2)\key[058]\pbid=#PB_Key_F1            :::  sgx_keyLay(2)\key[058]\chr[0] = ""   :::  sgx_keyLay(2)\key[058]\chr[1] = ""   :::  sgx_keyLay(2)\key[058]\chr[2] = ""
        sgx_keyLay(2)\key[059]\pbid=#PB_Key_F2            :::  sgx_keyLay(2)\key[059]\chr[0] = ""   :::  sgx_keyLay(2)\key[059]\chr[1] = ""   :::  sgx_keyLay(2)\key[059]\chr[2] = ""
        sgx_keyLay(2)\key[060]\pbid=#PB_Key_F3            :::  sgx_keyLay(2)\key[060]\chr[0] = ""   :::  sgx_keyLay(2)\key[060]\chr[1] = ""   :::  sgx_keyLay(2)\key[060]\chr[2] = ""
        sgx_keyLay(2)\key[061]\pbid=#PB_Key_F4            :::  sgx_keyLay(2)\key[061]\chr[0] = ""   :::  sgx_keyLay(2)\key[061]\chr[1] = ""   :::  sgx_keyLay(2)\key[061]\chr[2] = ""
        sgx_keyLay(2)\key[062]\pbid=#PB_Key_F5            :::  sgx_keyLay(2)\key[062]\chr[0] = ""   :::  sgx_keyLay(2)\key[062]\chr[1] = ""   :::  sgx_keyLay(2)\key[062]\chr[2] = ""
        sgx_keyLay(2)\key[063]\pbid=#PB_Key_F6            :::  sgx_keyLay(2)\key[063]\chr[0] = ""   :::  sgx_keyLay(2)\key[063]\chr[1] = ""   :::  sgx_keyLay(2)\key[063]\chr[2] = ""
        sgx_keyLay(2)\key[064]\pbid=#PB_Key_F7            :::  sgx_keyLay(2)\key[064]\chr[0] = ""   :::  sgx_keyLay(2)\key[064]\chr[1] = ""   :::  sgx_keyLay(2)\key[064]\chr[2] = ""
        sgx_keyLay(2)\key[065]\pbid=#PB_Key_F8            :::  sgx_keyLay(2)\key[065]\chr[0] = ""   :::  sgx_keyLay(2)\key[065]\chr[1] = ""   :::  sgx_keyLay(2)\key[065]\chr[2] = ""
        sgx_keyLay(2)\key[066]\pbid=#PB_Key_F9            :::  sgx_keyLay(2)\key[066]\chr[0] = ""   :::  sgx_keyLay(2)\key[066]\chr[1] = ""   :::  sgx_keyLay(2)\key[066]\chr[2] = ""
        sgx_keyLay(2)\key[067]\pbid=#PB_Key_F10           :::  sgx_keyLay(2)\key[067]\chr[0] = ""   :::  sgx_keyLay(2)\key[067]\chr[1] = ""   :::  sgx_keyLay(2)\key[067]\chr[2] = ""
        sgx_keyLay(2)\key[068]\pbid=#PB_Key_F11           :::  sgx_keyLay(2)\key[068]\chr[0] = ""   :::  sgx_keyLay(2)\key[068]\chr[1] = ""   :::  sgx_keyLay(2)\key[068]\chr[2] = ""
        sgx_keyLay(2)\key[069]\pbid=#PB_Key_F12           :::  sgx_keyLay(2)\key[069]\chr[0] = ""   :::  sgx_keyLay(2)\key[069]\chr[1] = ""   :::  sgx_keyLay(2)\key[069]\chr[2] = ""
        
        sgx_keyLay(2)\key[070]\pbid=#PB_Key_NumLock       :::  sgx_keyLay(2)\key[070]\chr[0] = ""   :::  sgx_keyLay(2)\key[070]\chr[1] = ""   :::  sgx_keyLay(2)\key[070]\chr[2] = ""
        sgx_keyLay(2)\key[071]\pbid=#PB_Key_Scroll        :::  sgx_keyLay(2)\key[071]\chr[0] = ""   :::  sgx_keyLay(2)\key[071]\chr[1] = ""   :::  sgx_keyLay(2)\key[071]\chr[2] = ""
        sgx_keyLay(2)\key[072]\pbid=#PB_Key_Pad0          :::  sgx_keyLay(2)\key[072]\chr[0] = "0"  :::  sgx_keyLay(2)\key[072]\chr[1] = ""  :::  sgx_keyLay(2)\key[072]\chr[2] = ""
        sgx_keyLay(2)\key[073]\pbid=#PB_Key_Pad1          :::  sgx_keyLay(2)\key[073]\chr[0] = "1"  :::  sgx_keyLay(2)\key[073]\chr[1] = "1"  :::  sgx_keyLay(2)\key[073]\chr[2] = ""
        sgx_keyLay(2)\key[074]\pbid=#PB_Key_Pad2          :::  sgx_keyLay(2)\key[074]\chr[0] = "2"  :::  sgx_keyLay(2)\key[074]\chr[1] = "2"  :::  sgx_keyLay(2)\key[074]\chr[2] = ""
        sgx_keyLay(2)\key[075]\pbid=#PB_Key_Pad3          :::  sgx_keyLay(2)\key[075]\chr[0] = "3"  :::  sgx_keyLay(2)\key[075]\chr[1] = "3"  :::  sgx_keyLay(2)\key[075]\chr[2] = ""
        sgx_keyLay(2)\key[076]\pbid=#PB_Key_Pad4          :::  sgx_keyLay(2)\key[076]\chr[0] = "4"  :::  sgx_keyLay(2)\key[076]\chr[1] = "4"  :::  sgx_keyLay(2)\key[076]\chr[2] = ""
        sgx_keyLay(2)\key[077]\pbid=#PB_Key_Pad5          :::  sgx_keyLay(2)\key[077]\chr[0] = "5"  :::  sgx_keyLay(2)\key[077]\chr[1] = "5"  :::  sgx_keyLay(2)\key[077]\chr[2] = ""
        sgx_keyLay(2)\key[078]\pbid=#PB_Key_Pad6          :::  sgx_keyLay(2)\key[078]\chr[0] = "6"  :::  sgx_keyLay(2)\key[078]\chr[1] = "6"  :::  sgx_keyLay(2)\key[078]\chr[2] = ""
        sgx_keyLay(2)\key[079]\pbid=#PB_Key_Pad7          :::  sgx_keyLay(2)\key[079]\chr[0] = "7"  :::  sgx_keyLay(2)\key[079]\chr[1] = "7"  :::  sgx_keyLay(2)\key[079]\chr[2] = ""
        sgx_keyLay(2)\key[080]\pbid=#PB_Key_Pad8          :::  sgx_keyLay(2)\key[080]\chr[0] = "8"  :::  sgx_keyLay(2)\key[080]\chr[1] = "8"  :::  sgx_keyLay(2)\key[080]\chr[2] = ""
        sgx_keyLay(2)\key[081]\pbid=#PB_Key_Pad9          :::  sgx_keyLay(2)\key[081]\chr[0] = "9"  :::  sgx_keyLay(2)\key[081]\chr[1] = "9"  :::  sgx_keyLay(2)\key[081]\chr[2] = ""
        
        sgx_keyLay(2)\key[082]\pbid=#PB_Key_Add           :::  sgx_keyLay(2)\key[082]\chr[0] = "+"  :::  sgx_keyLay(2)\key[082]\chr[1] = "+"  :::  sgx_keyLay(2)\key[082]\chr[2] = ""
        sgx_keyLay(2)\key[083]\pbid=#PB_Key_Subtract      :::  sgx_keyLay(2)\key[083]\chr[0] = "-"  :::  sgx_keyLay(2)\key[083]\chr[1] = "-"  :::  sgx_keyLay(2)\key[083]\chr[2] = ""
        sgx_keyLay(2)\key[084]\pbid=#PB_Key_Decimal       :::  sgx_keyLay(2)\key[084]\chr[0] = "."  :::  sgx_keyLay(2)\key[084]\chr[1] = ""   :::  sgx_keyLay(2)\key[084]\chr[2] = ""
        sgx_keyLay(2)\key[085]\pbid=#PB_Key_PadEnter      :::  sgx_keyLay(2)\key[085]\chr[0] = ""   :::  sgx_keyLay(2)\key[085]\chr[1] = ""   :::  sgx_keyLay(2)\key[085]\chr[2] = ""
        sgx_keyLay(2)\key[086]\pbid=#PB_Key_RightControl  :::  sgx_keyLay(2)\key[086]\chr[0] = ""   :::  sgx_keyLay(2)\key[086]\chr[1] = ""   :::  sgx_keyLay(2)\key[086]\chr[2] = ""
        sgx_keyLay(2)\key[087]\pbid=#PB_Key_PadComma      :::  sgx_keyLay(2)\key[087]\chr[0] = "."  :::  sgx_keyLay(2)\key[087]\chr[1] = ""   :::  sgx_keyLay(2)\key[087]\chr[2] = ""
        sgx_keyLay(2)\key[088]\pbid=#PB_Key_Divide        :::  sgx_keyLay(2)\key[088]\chr[0] = "/"  :::  sgx_keyLay(2)\key[088]\chr[1] = "/"  :::  sgx_keyLay(2)\key[088]\chr[2] = ""
        sgx_keyLay(2)\key[089]\pbid=#PB_Key_RightAlt      :::  sgx_keyLay(2)\key[089]\chr[0] = ""   :::  sgx_keyLay(2)\key[089]\chr[1] = ""   :::  sgx_keyLay(2)\key[089]\chr[2] = ""
        sgx_keyLay(2)\key[090]\pbid=#PB_Key_Pause         :::  sgx_keyLay(2)\key[090]\chr[0] = ""   :::  sgx_keyLay(2)\key[090]\chr[1] = ""   :::  sgx_keyLay(2)\key[090]\chr[2] = ""
        sgx_keyLay(2)\key[091]\pbid=#PB_Key_Home          :::  sgx_keyLay(2)\key[091]\chr[0] = ""   :::  sgx_keyLay(2)\key[091]\chr[1] = ""   :::  sgx_keyLay(2)\key[091]\chr[2] = ""
        sgx_keyLay(2)\key[092]\pbid=#PB_Key_Up            :::  sgx_keyLay(2)\key[092]\chr[0] = ""   :::  sgx_keyLay(2)\key[092]\chr[1] = ""   :::  sgx_keyLay(2)\key[092]\chr[2] = ""
        sgx_keyLay(2)\key[093]\pbid=#PB_Key_Down          :::  sgx_keyLay(2)\key[093]\chr[0] = ""   :::  sgx_keyLay(2)\key[093]\chr[1] = ""   :::  sgx_keyLay(2)\key[093]\chr[2] = ""
        sgx_keyLay(2)\key[094]\pbid=#PB_Key_Left          :::  sgx_keyLay(2)\key[094]\chr[0] = ""   :::  sgx_keyLay(2)\key[094]\chr[1] = ""   :::  sgx_keyLay(2)\key[094]\chr[2] = ""
        sgx_keyLay(2)\key[095]\pbid=#PB_Key_Right         :::  sgx_keyLay(2)\key[095]\chr[0] = ""   :::  sgx_keyLay(2)\key[095]\chr[1] = ""   :::  sgx_keyLay(2)\key[095]\chr[2] = ""
        sgx_keyLay(2)\key[096]\pbid=#PB_Key_End           :::  sgx_keyLay(2)\key[096]\chr[0] = ""   :::  sgx_keyLay(2)\key[096]\chr[1] = ""   :::  sgx_keyLay(2)\key[096]\chr[2] = ""
        sgx_keyLay(2)\key[097]\pbid=#PB_Key_PageUp        :::  sgx_keyLay(2)\key[097]\chr[0] = ""   :::  sgx_keyLay(2)\key[097]\chr[1] = ""   :::  sgx_keyLay(2)\key[097]\chr[2] = ""
        sgx_keyLay(2)\key[098]\pbid=#PB_Key_PageDown      :::  sgx_keyLay(2)\key[098]\chr[0] = ""   :::  sgx_keyLay(2)\key[098]\chr[1] = ""   :::  sgx_keyLay(2)\key[098]\chr[2] = ""
        sgx_keyLay(2)\key[099]\pbid=#PB_Key_Insert        :::  sgx_keyLay(2)\key[099]\chr[0] = ""   :::  sgx_keyLay(2)\key[099]\chr[1] = ""   :::  sgx_keyLay(2)\key[099]\chr[2] = ""
        sgx_keyLay(2)\key[100]\pbid=#PB_Key_Delete        :::  sgx_keyLay(2)\key[100]\chr[0] = ""   :::  sgx_keyLay(2)\key[100]\chr[1] = ""   :::  sgx_keyLay(2)\key[100]\chr[2] = ""


Ca me semble à mon niveau difficile d'aller modifier le code en prenant en compte ta suggestion d'implémentation de récupération du clavier, alors que PureBasic fournit la bibliotheque ExamineKeyboard() et autres fonctions censés servir à ça.

Au passage et hors sujet si vous avez des suggestions de GUI toute faite pret à l'emploi, je prend!
J'ai vu que Cl.bator ( G-ROM maintenant si j'ai bien suivi ) avait commencé à en faire une il y a 3 ans. Les source semblent disponibles, mais je ne sais pas si elles sont fonctionel. Ce ne semble pas etre le cas vu qu'il n'y a pas eu de publication la dessus.
Les autres sources de GUI trouvées dans le forum ne me semblent pas aussi abouties que la SGX. Mais il manque quand meme la gestion de fenetre transparent. que je vais tenté de rajouter ( tres conditionnel )

Re: bug clavier ?

Publié : lun. 26/sept./2011 11:23
par Backup
le bug viens effectivement du fait qu'il existe la constante

#PB_Key_SemiColon

mais pas de

#PB_Key_Colon .... Fred , si tu lis ?

Re: bug clavier ?

Publié : lun. 26/sept./2011 11:28
par falsam
Dans l'exemple ci-dessous,
l'identifiant #PB_Key_Comma existe bien mais n'est reconnu que si on presse la touche ";"

Code : Tout sélectionner

Procedure.s GetKeyboardASCII() 

  Static oldkey.s 
  Static timer_on.l 
  Static start.l 

  kchar.s="" 
  If KeyboardPushed(#PB_Key_0) Or KeyboardPushed(#PB_Key_Pad0) 
    kchar="0" 
  ElseIf KeyboardPushed(#PB_Key_1) Or KeyboardPushed(#PB_Key_Pad1) 
    kchar="1" 
  ElseIf KeyboardPushed(#PB_Key_2) Or KeyboardPushed(#PB_Key_Pad2) 
    kchar="2" 
  ElseIf KeyboardPushed(#PB_Key_3) Or KeyboardPushed(#PB_Key_Pad3) 
    kchar="3" 
  ElseIf KeyboardPushed(#PB_Key_4) Or KeyboardPushed(#PB_Key_Pad4) 
    kchar="4" 
  ElseIf KeyboardPushed(#PB_Key_5) Or KeyboardPushed(#PB_Key_Pad5) 
    kchar="5" 
  ElseIf KeyboardPushed(#PB_Key_6) Or KeyboardPushed(#PB_Key_Pad6) 
    kchar="6" 
  ElseIf KeyboardPushed(#PB_Key_7) Or KeyboardPushed(#PB_Key_Pad7) 
    kchar="7" 
  ElseIf KeyboardPushed(#PB_Key_8) Or KeyboardPushed(#PB_Key_Pad8) 
    kchar="8" 
  ElseIf KeyboardPushed(#PB_Key_9) Or KeyboardPushed(#PB_Key_Pad9) 
    kchar="9" 
  ElseIf KeyboardPushed(#PB_Key_Minus) 
    kchar="-" 
  ElseIf KeyboardPushed(#PB_Key_Equals) 
    kchar="=" 
  ElseIf KeyboardPushed(#PB_Key_Slash) 
    kchar="/" 
  ElseIf KeyboardPushed(#PB_Key_BackSlash) 
    kchar="\" 
  ElseIf KeyboardPushed(#PB_Key_LeftBracket) 
    kchar="[" 
  ElseIf KeyboardPushed(#PB_Key_RightBracket) 
    kchar="]" 
  ElseIf KeyboardPushed(#PB_Key_SemiColon) 
    kchar=";" 
  ElseIf KeyboardPushed(#PB_Key_Apostrophe) 
    kchar="'" 
  ElseIf KeyboardPushed(#PB_Key_Period) Or KeyboardPushed(#PB_Key_PadComma) 
    kchar="." 
  ElseIf KeyboardPushed(#PB_Key_Comma) 
    kchar="," 
  ElseIf KeyboardPushed(#PB_Key_Q) 
    kchar="q" 
  ElseIf KeyboardPushed(#PB_Key_W) 
    kchar="w" 
  ElseIf KeyboardPushed(#PB_Key_E) 
    kchar="e" 
  ElseIf KeyboardPushed(#PB_Key_R) 
    kchar="r" 
  ElseIf KeyboardPushed(#PB_Key_T) 
    kchar="t" 
  ElseIf KeyboardPushed(#PB_Key_Y) 
    kchar="y" 
  ElseIf KeyboardPushed(#PB_Key_U) 
    kchar="u" 
  ElseIf KeyboardPushed(#PB_Key_I) 
    kchar="i" 
  ElseIf KeyboardPushed(#PB_Key_O) 
    kchar="o" 
  ElseIf KeyboardPushed(#PB_Key_P) 
    kchar="p" 
  ElseIf KeyboardPushed(#PB_Key_A) 
    kchar="a" 
  ElseIf KeyboardPushed(#PB_Key_S) 
    kchar="s" 
  ElseIf KeyboardPushed(#PB_Key_D) 
    kchar="d" 
  ElseIf KeyboardPushed(#PB_Key_F) 
    kchar="f" 
  ElseIf KeyboardPushed(#PB_Key_G) 
    kchar="g" 
  ElseIf KeyboardPushed(#PB_Key_H) 
    kchar="h" 
  ElseIf KeyboardPushed(#PB_Key_J) 
    kchar="j" 
  ElseIf KeyboardPushed(#PB_Key_K) 
    kchar="k" 
  ElseIf KeyboardPushed(#PB_Key_L) 
    kchar="l" 
  ElseIf KeyboardPushed(#PB_Key_Z) 
    kchar="z" 
  ElseIf KeyboardPushed(#PB_Key_X) 
    kchar="x" 
  ElseIf KeyboardPushed(#PB_Key_C) 
    kchar="c" 
  ElseIf KeyboardPushed(#PB_Key_V) 
    kchar="v" 
  ElseIf KeyboardPushed(#PB_Key_B) 
    kchar="b" 
  ElseIf KeyboardPushed(#PB_Key_N) 
    kchar="n" 
  ElseIf KeyboardPushed(#PB_Key_M) 
    kchar="m" 
  ElseIf KeyboardPushed(#PB_Key_Space) 
    kchar=" " 
  ElseIf KeyboardPushed(#PB_Key_Back) 
    kchar=Chr(14)      
  EndIf 
    
  If KeyboardPushed(#PB_Key_LeftShift) Or KeyboardPushed(#PB_Key_RightShift) 
    Select kchar 
      Case "/" 
        kchar="?" 
      Case "." 
        kchar=">" 
      Case "," 
        kchar="<" 
      Case ";" 
        kchar=":" 
      Case "'" 
        kchar=Chr(34) 
      Case "[" 
        kchar="{" 
      Case "]" 
        kchar="}" 
      Case "\" 
        kchar="|" 
      Case "`" 
        kchar="~" 
      Case "1" 
        kchar="!" 
      Case "2" 
        kchar="@" 
      Case "3" 
        kchar="#" 
      Case "4" 
        kchar="$" 
      Case "5" 
        kchar="%" 
      Case "6" 
        kchar="^" 
      Case "7" 
        kchar="&" 
      Case "8" 
        kchar="*" 
      Case "9" 
        kchar="(" 
      Case "0" 
        kchar=")" 
      Case "-" 
        kchar="_" 
      Case "=" 
        kchar="+" 
    EndSelect 
    
    If Asc(kchar) >= $61 And Asc(kchar) <= $7A 
      kchar=UCase(kchar) 
    EndIf    
  EndIf 
  
  If UCase(kchar)=UCase(oldkey)
    If timer_on 
      If ElapsedMilliseconds()-start < 700 
        ProcedureReturn "" 
      Else 
        Delay(80) 
        ProcedureReturn kchar 
      EndIf 
    Else 
      timer_on = #True 
      start=ElapsedMilliseconds() 
      ProcedureReturn "" 
    EndIf 
  Else 
    oldkey=kchar 
    timer_on = #False 
    ProcedureReturn kchar 
  EndIf 
  
EndProcedure 

; Test program 

InitSprite():InitKeyboard()

OpenScreen(800,600,32,"") 

;Le clavier utilise l'agencement des touches propres au langage de l'utilisateur 
KeyboardMode(#PB_Keyboard_International)

;ou
;KeyboardMode(#PB_Keyboard_Qwerty)

Repeat 
  ExamineKeyboard() 
  tmp.s = GetKeyboardASCII() 
  If tmp <> "" 
    If tmp = Chr(14) ; backspace 
      a$=Left(a$,Len(a$)-1) 
    Else 
      a$+tmp 
    EndIf 
  EndIf 
  ClearScreen(0) 
  
  StartDrawing(ScreenOutput()) 
  DrawText(0, 20, "Appuyez sur la touche [Echap] pour quitter")
  DrawText(50, 240, "Commencez à écrire touche retour arriére pour effacer, (Clavier azerty par défaut) ")
  DrawText(50, 260, "La virgule se trouve à la place du ';'")
  DrawText(50,280, a$ + "_",#White,0) 
  StopDrawing() 
  
  FlipBuffers() 
  Delay(1) 
Until KeyboardPushed(#PB_Key_Escape) 

End

Re: bug clavier ?

Publié : lun. 26/sept./2011 12:40
par jem
Je ne pense pas qu'il sagissent d'un probleme de nom de constante

Mon premier code d'exemple parcours tous les ScanCodes de 0 a 255 sans s'occuper de nom de constantes ou autre.
et en mode KeyboardMode(#PB_Keyboard_International) l'appuie sur la touche "?" ne produit AUCUNE sortie , alors que bizzarement l'appuie sur la touche M en produit 2.
(Arrivez vous à reproduire ce phénomène sur vos machines ? - pas tester sous Linux ou MacOS n'en n'ayant pas actuellement sous la main)

Je pense qu'il s'agit bien d'une petite coquille dans le code du compilateur PureBasique.
L'appuie sur la touche "?" devrait généré le code 39( ou un autre code) et la touche "M" le code 50 uniquement.

Code : Tout sélectionner

Debug "M=" + Str(#PB_Key_M) +  "  ?=" + Str(#PB_Key_SemiColon)"
Confirme que les Constantes M=50 et SemiColon=39.
Je ne suis pas sur que l'appuie sur la touche "?" avec un clavier Azerty Français doit générer un code 39.
Mais je pense etre à peu pret certain que l'appuie sur la touche "M" ne derait pas en générer 2

Re: bug clavier ?

Publié : lun. 26/sept./2011 12:47
par Backup
jem a écrit :Je ne pense pas qu'il sagissent d'un probleme de nom de constante
oui on est d'accord ! ;)

le fait est que la constante "Colon" manque !
ce qui pourrai expliqué qu'il y a eu un "pontage" quelques part

le fait que tu ai un scan code double est aussi une explication du problème

ps: le probleme ne viens pas du compilateur , mais plus surement de la librairie qui gere le clavier . "\Purebasic_4_00\PureLibraries\Keyboard". ;)

Re: bug clavier ?

Publié : lun. 26/sept./2011 12:53
par case
bizarre que ce bug n'aie toujours pas été corrige, je reste surpris de ne pas avoir non plus eu de réponses sur le sujet.
c'est quand même important l'interface entre l'humain et la machine non ?

merci d'avoir fait remonter le topic.

Re: bug clavier ?

Publié : lun. 26/sept./2011 13:10
par Backup
case a écrit :bizarre que ce bug n'aie toujours pas été corrige, je reste surpris de ne pas avoir non plus eu de réponses sur le sujet. .
Fred ne regarde que le Forum anglais pour les bugs ..

Re: bug clavier ?

Publié : lun. 26/sept./2011 16:59
par case
oui mais je l'ai justement signale sur le forum anglais... :)