Page 1 sur 1

Majuscules impossible !

Publié : mar. 01/sept./2015 14:49
par SPH
Salut,

je viens partager avec vous un grand mystere irresolu.
Dans le code qui suit, il est demandé un nom. Essayez d'en inscrire un. Curieusement, les majuscules ne sont pas pris en compte. PKOI ?

Code : Tout sélectionner

Global win, LMB, RMB, OldMouseX, OldMouseY
Dim menu_nom$(20)
Dim menu_niveau(20)
Dim menu_score(20)
Dim menu_avatar(20)
Dim menu_pieces(20)
Dim menu_telep(20)
Dim menu_chance(20)
Dim menu_pouvoir(20)
Dim menu_magie(20)


Procedure CrisotResetMouseDelta()
  OldMouseX=WindowMouseX(win)
  OldMouseY=WindowMouseY(win)
EndProcedure

Procedure CrisotMouseDeltaX()
  DeltaMouseX=WindowMouseX(win)-OldMouseX
  OldMouseX=WindowMouseX(win)
  ProcedureReturn DeltaMouseX
EndProcedure

Procedure CrisotMouseDeltaY()
  DeltaMouseY=WindowMouseY(win)-OldMouseY
  OldMouseY=WindowMouseY(win)
  ProcedureReturn DeltaMouseY
EndProcedure

Procedure CrisotMouseButton() ; Très, très sale (PB ne gère pas les Event ButtonUp ou ButtonDown)
  Repeat
    Event = WindowEvent()
    Select Event
      Case #WM_LBUTTONDOWN	; Sale
        LMB=#True
      Case #PB_Event_LeftClick
        LMB=#False
      Case #WM_RBUTTONDOWN	; Sale
        RMB=#True
      Case #PB_Event_RightClick
        RMB=#False
    EndSelect
  Until Event=0
EndProcedure

Procedure CrisotRightMouseButton()
  CrisotMouseButton()
  ProcedureReturn RMB
EndProcedure

Procedure CrisotLeftMouseButton()	
  CrisotMouseButton()
  ProcedureReturn LMB
EndProcedure

#src=0 
#dst=1
rezo.b=1
tchat=0
nb_tchat.b=9

;SetPriorityClass_ ( GetCurrentProcess_ (), #IDLE_PRIORITY_CLASS ) 
UseJPEGImageDecoder()
UseOGGSoundDecoder() 

If InitSprite() And InitMouse() And InitKeyboard() And InitSound()
Else
  MessageRequester("Erreur", "InitSprite() And InitMouse() And InitKeyboard() And InitSound() : impossible")
  End 
EndIf
If LoadFont(1, "Arial", 8) 
Else : MessageRequester("Erreur", "LoadFont(1, ''Arial'', 8) : impossible")
  End
EndIf
;Andalus$="Andalus"
Andalus$="Times New Roman"
If LoadFont(2, Andalus$, 50)
Else : MessageRequester("Erreur", "LoadFont(2, Andalus$, 50) : impossible")
  End
EndIf

Dim avatar.b(20)
Dim nom$(8)
Dim score.q(7)
Dim niveau.b(7)
mon_numero.b=0
niveau(mon_numero)=2
mod.b=1
grillage.b=2
sprite00232=232



; CRISOT
;If ExamineDesktops()
;	scr_w = DesktopWidth(0)
;	scr_h = DesktopHeight(0)
;	OpenScreen(scr_w,scr_h,32,"");   OpenWindowedScreen(WindowID(window),0,0,sWidth,sHeight,1,0,0,#PB_Screen_SmartSynchronization)
;Else
;MessageRequester("Erreur", "OpenScreen impossible")
;End
;EndIf 

; CRISOT - Remplace avantageusement l'OpenScreen()

win=OpenWindow(#PB_Any, 0, 0, 0, 0, "HexaScrabble2",  #PB_Window_Maximize |  #PB_Window_BorderLess )
;win=OpenWindow(#PB_Any, 0, 0, 800,600, "HexaScrabble2")
scr_w=WindowWidth(win) : scr_h=WindowHeight(win)
OpenWindowedScreen (WindowID(win),0 , 0, scr_w, scr_h,0, 0, 0, #PB_Screen_SmartSynchronization)
ShowCursor_(0) ; CRISOT - On cache le curseur.

player:;-player:

name$=""
Repeat
  ClearScreen(0):LoadFont(1, "Arial", 8):  StartDrawing(ScreenOutput()) :  DrawingMode( #PB_2DDrawing_Default) ;#PB_2DDrawing_Transparent)
  DrawingFont(FontID(1)) :  BackColor(0)
  i+1
  i%80
  If i<40
    b$="_"
  Else
    b$=""
  EndIf
  a$="<                                >"
  DrawText(scr_w/2-TextWidth(a$)/2,210,a$, RGB(0,255,0))
  a$="Nom : "+name$
  DrawText(scr_w/2-TextWidth(a$)/2,24*12,a$+b$, RGB(0,255,0))
        ExamineKeyboard() 

  name$+KeyboardInkey()
  name$=ReplaceString(name$,Chr(13),"")
  name$=ReplaceString(name$,Chr(8),"")
  ExamineKeyboard() 
  If KeyboardPushed(#PB_Key_Back) And back=1
    Repeat
      ExamineKeyboard() 
    Until KeyboardPushed(#PB_Key_Back) =0
    back=0
  EndIf
  If KeyboardPushed(#PB_Key_Back) And back=0
    name$=Mid(name$,1,Len(name$)-1) : back=1
  EndIf
  
  StopDrawing() 
  
  
  FlipBuffers();-;FlipBuffers()
  If avat=1
    Delay(200)
    avat=0
  EndIf
  
  ExamineKeyboard() 
  If (KeyboardPushed(#PB_Key_Return) Or KeyboardPushed(#PB_Key_PadEnter)) And name$<>""
    menu_nom$(sauve)=name$
    menu_niveau(sauve)=1
    ecrire=0
    ecrire:
    If CreateFile(#src, chemin$+"players\"+Str(sauve));;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      WriteByte(#src,Len(menu_nom$(sauve)))
      For i=1 To Len(menu_nom$(sauve))
        WriteByte(#src,Asc(Mid(menu_nom$(sauve),i,1)))
      Next
      WriteByte(#src,1)
      WriteByte(#src,avatar(sauve))
      WriteByte(#src,10)
      WriteByte(#src,0)
      WriteByte(#src,0)
      WriteByte(#src,0)
      WriteByte(#src,0)
      WriteQuad(#src,0)
      CloseFile(#src)
      Return
    EndIf
  EndIf
  
  If KeyboardPushed(#PB_Key_Left)
    avatar(sauve)-1
    avat=1
    If avatar(sauve)<0
      avatar(sauve)=19
    EndIf
    
  EndIf
  If KeyboardPushed(#PB_Key_Right)
    avatar(sauve)+1
    avat=1
    If avatar(sauve)>19
      avatar(sauve)=0
    EndIf
    
  EndIf
  
Until KeyboardPushed(#PB_Key_Escape) 
Repeat
  ExamineKeyboard() 
Until KeyboardPushed(#PB_Key_Escape)=0 


Thx 8)

Re: Majuscules impossible !

Publié : mar. 01/sept./2015 15:22
par Ollivier
Version compilateur?

Re: Majuscules impossible !

Publié : mar. 01/sept./2015 15:25
par falsam
Ollivier a écrit :Version compilateur?
A mon avis SPH est encore à la version 5.11 :wink:

Re: Majuscules impossible !

Publié : mar. 01/sept./2015 15:43
par Ollivier
Ah, d'accord...

remplace ta ligne

Code : Tout sélectionner

name$+KeyboardInkey()
par

Code : Tout sélectionner

Touche.S = KeyboardInkey()
If KeyboardPushed(#PB_Key_LeftShift)
   Touche = UCase(Touche)
EndIf
name$+Touche

Re: Majuscules impossible !

Publié : mar. 01/sept./2015 15:47
par SPH
Je l'ai essayé en 5.11 mais aussi en 5.31 :?

Re: Majuscules impossible !

Publié : mar. 01/sept./2015 15:51
par SPH
Ollivier a écrit :remplace ta ligne

Code : Tout sélectionner

name$+KeyboardInkey()
par

Code : Tout sélectionner

Touche.S = KeyboardInkey()
If KeyboardPushed(#PB_Key_LeftShift)
   Touche = UCase(Touche)
EndIf
name$+Touche
Heu !!!!
Sans meme l'essayer, tu es sur que ca prendra les minuscules et les majuscules ?

Re: Majuscules impossible !

Publié : mar. 01/sept./2015 15:54
par falsam
SPH a écrit :Sans meme l'essayer, tu es sur que ca prendra les minuscules et les majuscules ?
MouaHHHhhhhhhaaaa ...... ben essayes :mrgreen:

A quoi ça sert que le pere Ollivier se décarcasse si tu n'essayes même pas.

Re: Majuscules impossible !

Publié : mar. 01/sept./2015 15:55
par SPH
ok, je teste :idea:

Re: Majuscules impossible !

Publié : mar. 01/sept./2015 16:06
par SPH
Ok merci, ca marche 8)

Re: Majuscules impossible !

Publié : mar. 01/sept./2015 17:50
par falsam
Voila un truc étonnant mais peut être que quelqu'un pourra y répondre.

La saisie d'un nom en différenciant les minuscule des majuscule fonctionne en openscreen() mais pas avec un OpenWindowedScreen()

■ Methode OpenScreen()

Code : Tout sélectionner

If InitSprite() And InitKeyboard() And OpenScreen(1024, 768, 32, "")
  Repeat
    FlipBuffers()
    ClearScreen(RGB(0, 0, 0))
     
    ExamineKeyboard()
    
    
    If KeyboardReleased(#PB_Key_Back)
      ;Correction arriere
      name$ = Left(name$, Len(name$)-1)
        
    Else
      ;Saisie d'un caractere
      caractere$=KeyboardInkey()
      
      ;Controle du caractere
      If FindString("1234567890 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", caractere$) 
        name$ + caractere$
      EndIf
      
    EndIf
    
    ;Affichage du nom
    If StartDrawing(ScreenOutput())
        DrawingMode(1)
        FrontColor(RGB(128, 255, 0))
        DrawText(20, 20, "Votre nom:")
        DrawText(100, 20, name$)
      StopDrawing()
    EndIf
  Until KeyboardPushed(#PB_Key_Escape)
EndIf
■ La même méthode en OpenWindowScreen()

Code : Tout sélectionner

win=OpenWindow(#PB_Any, 0, 0, 0, 0, "HexaScrabble2",  #PB_Window_Maximize |  #PB_Window_BorderLess )

scr_w=WindowWidth(win) : scr_h=WindowHeight(win)
ShowCursor_(0)

If InitSprite() And InitKeyboard() And OpenWindowedScreen(WindowID(win), 0, 0, scr_w, scr_h,0, 0, 0, #PB_Screen_SmartSynchronization)

  Repeat
    FlipBuffers()
    ClearScreen(RGB(0, 0, 0))
     
    ExamineKeyboard()
    
    If KeyboardReleased(#PB_Key_Back)
      ;Correction arriere
      name$ = Left(name$, Len(name$)-1)
        
    Else
      ;Saisie d'un caractere
      caractere$=KeyboardInkey()
      
      ;Controle du caractere
      If FindString("1234567890 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", caractere$) 
        name$ + caractere$
      EndIf
      
    EndIf
    
    ;Affichage du nom
    If StartDrawing(ScreenOutput())
        DrawingMode(1)
        FrontColor(RGB(128, 255, 0))
        DrawText(20, 20, "Votre nom:")
        DrawText(100, 20, name$)
      StopDrawing()
    EndIf
  Until KeyboardPushed(#PB_Key_Escape)
EndIf

Re: Majuscules impossible !

Publié : mar. 01/sept./2015 19:06
par SPH
falsam a écrit :Voila un truc étonnant mais peut être que quelqu'un pourra y répondre.

La saisie d'un nom en différenciant les minuscule des majuscule fonctionne en openscreen() mais pas avec un OpenWindowedScreen()
Oui, c'est exactement ce qui m'est arrivé dans mon jeu : crisot m'a passé mon jeu de openscreen() a OpenWindowedScreen() et c'est la que j'ai perdu ce qui marchait avant : les majuscules !

Curieux ce truc :|

Re: Majuscules impossible !

Publié : mer. 02/sept./2015 10:28
par Ar-S
Dans le windows screen, c'est l'etat buttonUp du SHIFT qui est activé donc l'action qui se passe c'est
- Le bouton se met en MAJ puis en MIN puis il considéré comme pressé.
(Suffit de mettre un debug pour s'en rendre compte.)
Alors que dans l'openscreen l'etat pressé est effectivement constant tant qu'on appuye sur shift.

Pour tricher dans le windowsscreen il suffit de faire en sorte que shift ait la même action que verrmaj
en gros 1 press sur shift active maj, 1 autre press active min.

ça fonctionne bien :

Code : Tout sélectionner

win=OpenWindow(#PB_Any, 0, 0, 0, 0, "HexaScrabble2",  #PB_Window_Maximize |  #PB_Window_BorderLess )

scr_w=WindowWidth(win) : scr_h=WindowHeight(win)
ShowCursor_(0)

If InitSprite() And InitKeyboard() And OpenWindowedScreen(WindowID(win), 0, 0, scr_w, scr_h,0, 0, 0, #PB_Screen_SmartSynchronization)

  Repeat
    FlipBuffers()
    ClearScreen(RGB(0, 0, 0))
     
    ExamineKeyboard()
   
    If KeyboardReleased(#PB_Key_Back)
      ;Correction arriere
      name$ = Left(name$, Len(name$)-1)
       
    ElseIf KeyboardReleased(#PB_Key_LeftShift)
      
      If MAJ = #True
        MAJ = #False
      Else
        MAJ = #True
      EndIf
      
      
    EndIf  
    
    caractere$=KeyboardInkey()
      
      ;Saisie d'un caractere
    If MAJ = #True
        name$ + UCase(caractere$)
      Else
        name$ + caractere$
      EndIf
      

      
    
    
    ;Affichage du nom
    If StartDrawing(ScreenOutput())
        DrawingMode(1)
        FrontColor(RGB(128, 255, 0))
        DrawText(20, 20, "Votre nom:")
        DrawText(100, 20, name$)
      StopDrawing()
    EndIf
  Until KeyboardPushed(#PB_Key_Escape)
EndIf