Seite 1 von 1

Bug in KeyboardInkey()

Verfasst: 04.04.2006 21:40
von Batze

Code: Alles auswählen

InitSprite()
InitKeyboard()

OpenWindow(0, 10, 10, 800, 600, "Test", #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget)
If OpenWindowedScreen(WindowID(0), 0, 0, 800, 600, 0, 0, 0)
    Repeat
      FlipBuffers()
      ClearScreen($000000)
      
      ExamineKeyboard()
      FullText$ + KeyboardInkey()  ; fügt das nächste Zeichen zum aktuellen Text (sofern vorhanden) hinzu
      
      ; Wenn wir die 'Backspace'-Taste drücken, löschen wir das letzte Zeichen
      ;
      If KeyboardReleased(#PB_Key_Back)  
        FullText$ = Left(FullText$, Len(FullText$)-1)
      EndIf

      ; Ergebnis darstellen
      ;
      If StartDrawing(ScreenOutput())
        DrawingMode(1)
        DrawText(20, 20, "Gib einfach etwas Text ein...:", $00FF88)
        DrawText(20, 40, FullText$,                        $00FF88)
        StopDrawing()
      EndIf
    Until KeyboardPushed(#PB_Key_Escape)
  EndIf
-> Geht nicht

Code: Alles auswählen

InitSprite()
InitKeyboard()

If OpenScreen(800,600,16,"")
    Repeat
      FlipBuffers()
      ClearScreen($000000)
      
      ExamineKeyboard()
      FullText$ + KeyboardInkey()  ; fügt das nächste Zeichen zum aktuellen Text (sofern vorhanden) hinzu
      
      ; Wenn wir die 'Backspace'-Taste drücken, löschen wir das letzte Zeichen
      ;
      If KeyboardReleased(#PB_Key_Back)  
        FullText$ = Left(FullText$, Len(FullText$)-1)
      EndIf

      ; Ergebnis darstellen
      ;
      If StartDrawing(ScreenOutput())
        DrawingMode(1)
        DrawText(20, 20, "Gib einfach etwas Text ein...:", $00FF88)
        DrawText(20, 40, FullText$,                        $00FF88)
        StopDrawing()
      EndIf
    Until KeyboardPushed(#PB_Key_Escape)
  EndIf
-> Geht

Denke also, dass es sich um einen Bug in KeyboardInkey() handelt, der bei PB 3.94 nicht auftritt. Es wird bei Windowed Screens keine Großschreibung angenommen.

Verfasst: 05.04.2006 13:34
von bobobo
und so geht's auch

Code: Alles auswählen

InitSprite() 
InitKeyboard() 

OpenWindow(0, 10, 10, 800, 600, "Test", #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) 
If OpenWindowedScreen(WindowID(0), 0, 0, 800, 600, 0, 0, 0) 
    Repeat 
      FlipBuffers() 
      ClearScreen($000000) 
      
      ExamineKeyboard()
      While WindowEvent():Wend ; <<--  WICHTIG ****
      FullText$ + KeyboardInkey()  ; fügt das nächste Zeichen zum aktuellen Text (sofern vorhanden) hinzu 
      
      ; Wenn wir die 'Backspace'-Taste drücken, löschen wir das letzte Zeichen 
      ; 
      If KeyboardReleased(#PB_Key_Back)  
        FullText$ = Left(FullText$, Len(FullText$)-1) 
      EndIf 

      ; Ergebnis darstellen 
      ; 
      If StartDrawing(ScreenOutput()) 
        DrawingMode(1) 
        DrawText(20, 20, "Gib einfach etwas Text ein...:", $00FF88) 
        DrawText(20, 40, FullText$,                        $00FF88) 
        StopDrawing() 
      EndIf 
    Until KeyboardPushed(#PB_Key_Escape) 
  EndIf

Verfasst: 12.04.2006 13:51
von Batze
oh, sorry, hatte ganz übersehen dass jemand geantwortet hat.
Danke bobobo.
Trotzdem ging der Code vor PB 4 noch, also sieht es für mich nach einem Bug aus.

Kann aber natürlich auch sein, dass sich die Funktionsweise der Keyboardbefehle geändert hat.

Verfasst: 12.04.2006 13:53
von bobobo
das While WindowEvent():Wend MUSS nach dem Examinekeyboard() rein .. ist halt neuerdings so

hab das übrigens aus dem englischen Forum.

Verfasst: 13.04.2006 10:45
von Batze
kann leider nicht so toll englisch um mich da durch zu schlagen.
Soll jetzt heißen, dass das früher eigentlich auch falsch war, aber es trotzdem ging?
Naja egal, die Windoweventabfrage muss ich eh einbauen.

Verfasst: 13.04.2006 11:00
von Kaeru Gaman
bobobo hat geschrieben:das While WindowEvent():Wend MUSS nach dem Examinekeyboard() rein .. ist halt neuerdings so
is dir zufällig bekannt, warum?

Verfasst: 13.04.2006 11:13
von bobobo

Verfasst: 13.04.2006 11:34
von Kaeru Gaman
hm.. strange strange...

windows sind halt echt nich meine profession...

...ich speichers mal im hinterkopf...

im moment arbeite ich noch nich mit 4.0...

ich frag mich halt nur grad, wie dann ne "normale" keyboardabfrage parallel zu dem üblichen check vom close-button realisiert werden soll...

Verfasst: 13.04.2006 17:50
von bobobo
normal genug?

Code: Alles auswählen

Enumeration
  #Window_0
  #Button_0
  #Button_1
  #Text_0
  #depressed
EndEnumeration
If OpenWindow(#Window_0, 216, 0, 600, 300,   "New window ( 0 ),#PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar")
  If CreateGadgetList(WindowID(#Window_0))
    ButtonGadget(#Button_0, 20, 130, 180, 60, "OK")
    ButtonGadget(#Button_1, 300, 130, 160, 60, "KO")
    TextGadget(#Text_0, 90, 30, 330, 50, "Drück mal ein D auf der Tastatur")
  EndIf
EndIf
AddKeyboardShortcut(#Window_0,#PB_Shortcut_D,#depressed)
Repeat
  Event = WaitWindowEvent()
  WindowID = EventWindow()
  GadgetID = EventGadget()
  EventType = EventType()
  If Event=#PB_Event_Menu And EventMenu()=#depressed
  Debug #depressed
    w+1
    Select w
    Case 1
      SetGadgetText(#Button_0,"KO")
      SetGadgetText(#Button_1,"OK")
    Case 2
      SetGadgetText(#Button_0,"OK")
      SetGadgetText(#Button_1,"KO")
      w=0
    EndSelect
  EndIf
  If Event = #PB_Event_Gadget
    If GadgetID = #Button_0 And w=1
    MessageRequester("So","Das hast Du nun davon",#MB_ICONSTOP)
    ElseIf GadgetID = #Button_1 And w=0
    MessageRequester("So","Das hast Du nun davon",#MB_ICONSTOP)
    EndIf
  EndIf
Until Event = #PB_Event_CloseWindow
End