Ah ! enfin quelqu'un qui les même erreurs que moi ! Merci KCC ^^ !
Le port série n'est invoqué que lorsque l'on appuie sur [Enter] donc je ne pense pas qu'il y ait lieu de les retirer...
Des touches fantomes !
Oui, le problème persiste. Je suis en train de me demander : si l'on appuie sur deux touches à la fois pendant que l'on s'amuse avec les flèches, peut-être que PB comprends que c'est un autre caractère... Mais dans ce cas, pourquoi seulement ceux qui sont enregistrés dans le tableau ???
Voici le code modifié avec ExamineKeyboard() :

Voici le code modifié avec ExamineKeyboard() :
Code : Tout sélectionner
InitSprite() : InitKeyboard()
LoadFont(0, "Arial", 20, #PB_Font_HighQuality)
Global x = 0
Global y = 0
Global blackit
Global Dim char(20, 2)
Procedure drawBG()
Box(0, 0, 600, 200, $A7C6A1)
For b = 0 To 19
Box(30 * b + 2, 2, 28, 38, $9BBE93)
Box(30 * b + 2, 44, 28, 38, $9BBE93)
Next
EndProcedure
Procedure drawTchar()
DrawingFont(FontID(0))
For u = 0 To 19
For v = 0 To 1
DrawText(30 * u + 2 + Int((28 - TextWidth(Chr(char(u, v))))/2), 42 * v + 40 - TextHeight(Chr(char(u, v))), Chr(char(u, v)), 0, $9BBE93)
Next
Next
EndProcedure
Procedure blackIT(delay)
Repeat
blackit = ~blackit
Delay(delay)
ForEver
EndProcedure
Procedure caClignoooooote(delay)
CreateThread(@blackIT(), delay)
Repeat
FlipBuffers()
StartDrawing(ScreenOutput())
drawBG()
drawTchar()
If blackit : Box(30 * x + 2, 42 * y + 2, 28, 38, 0) : EndIf
StopDrawing()
ForEver
EndProcedure
Procedure sendData()
dat$ = ""
For l = 0 To 1
For c = 0 To 19
dat$ = dat$ + Chr(char(c, l))
Next
dat$ = dat$ + Chr(10)
Next
WriteSerialPortString(0, dat$, #PB_Ascii)
EndProcedure
lcdStart.s = " LCD Writer v:1.0.1 " + Chr(10) + "********************"
OpenSerialPort(0, "COM1", 110, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 0, 40)
WriteSerialPortString(0, lcdStart, #PB_Ascii)
CreateImage(0, 600, 84)
OpenWindow(0, 10, 10, 600, 84, "LCD Writer", #PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget|#PB_Window_SizeGadget|#PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(0), 0, 0, 600, 84, 1, 0, 0)
CreateThread(@caClignoooooote(), 500)
Repeat
event = WaitWindowEvent(10)
ExamineKeyboard()
key$ = KeyboardInkey()
If KeyboardReleased(#PB_Key_Return)
SetWindowTitle(0, "TRANSFERT...")
sendData()
SetWindowTitle(0, "LCD Writer")
EndIf
If key$
char(x, y) = Asc(key$)
If x = 19
y = (y + 1) % 2
EndIf
x = (x + 1) % 20
EndIf
If KeyboardReleased(#PB_Key_Back)
If Not temoinB Or ElapsedMilliseconds() - ctrB >= 250
char(x, y) = 0
x = x - 1
If x = -1 : x = 19 : y = (y + 1) % 2 : EndIf
temoinB = 1
ctrB = ElapsedMilliseconds()
EndIf
Else
temoinB = 0
EndIf
If KeyboardReleased(#PB_Key_F1) And (KeyboardReleased(#PB_Key_LeftControl) Or KeyboardReleased(#PB_Key_RightControl))
If Not temoinLIGHT
light.s = Chr(7)
WriteSerialPortString(0, light, #PB_Ascii)
temoinLIGHT = 1
EndIf
Else
temoinLIGHT = 0
EndIf
If KeyboardReleased(#PB_Key_Right)
If Not temoinL Or ElapsedMilliseconds() - ctrR >= 250
x = (x + 1) % 20
blackit = -1
temoinL = 1
ctrR = ElapsedMilliseconds()
EndIf
Else
temoinL = 0
EndIf
If KeyboardReleased(#PB_Key_Left)
If Not temoinR Or ElapsedMilliseconds() - ctrL >= 250
x = x - 1
If x = -1 : x = 19 : EndIf
blackit = -1
temoinR = 1
ctrL = ElapsedMilliseconds()
EndIf
Else
temoinR = 0
EndIf
If KeyboardReleased(#PB_Key_Up) Or KeyboardReleased(#PB_Key_Down)
If Not temoinUD Or ElapsedMilliseconds() - ctrUD >= 250
y = (y + 1) % 2
blackit = -1
temoinUD = 1
ctrUD = ElapsedMilliseconds()
EndIf
Else
temoinUD = 0
EndIf
Until event = #PB_Event_CloseWindow
; IDE Options = PureBasic 4.30 (Windows - x86)
; CursorPosition = 81
; FirstLine = 67
; Folding = -
; EnableXP
[Résolu] des touches fantômes
Merci beaucoup !!! Je ne sais pas pourquoi... mais effectivement, ça fonctionne !




Quand ton programme utilises des thread, il est recommandé d'activer cette option cf la doc :
PureBasic a une option spéciale de compilation pour créer des exécutables multi-threadés (Le switch /THREAD pour le compilateur en ligne de commande ou l'option "Créer un exécutable multi-threadé" dans les options de compilation de l'IDE). Sans cette option, certaines fonctions (ainsi que la gestion des strings) sont plus rapides, mais inutilisables dans les threads. Il est toujours possible de créer des threads sans être dans ce mode, mais ce n'est pas recommandé, car même une simple manipulation de chaîne de caractères dans un thread peut être dangereux et doit être protégé. Activer cette option rend tout cela possible, mais au prix d'une diminution de la rapidité d'exécution. La décision de compiler en mode threadé doit donc être prise uniquement si le besoin s'en fait sentir.
[Résolu] Des touches fantômes
J'avais pas tout lu...
Mais merci encore ! Je ne pensais pas que ça pouvait influencer à ce point !
[Résolu]

Mais merci encore ! Je ne pensais pas que ça pouvait influencer à ce point !
[Résolu]