Der Befehl Inkey()

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
obbba
Beiträge: 53
Registriert: 06.02.2006 17:33

Der Befehl Inkey()

Beitrag von obbba »

Code: Alles auswählen

OpenConsole()
Repeat
  key$=Inkey()
  Delay(20)
Until key$<>""
Debug PeekB(@key+1)
Debug #PB_Key_N
CloseConsole()
Warum kommt da nicht beid beiden "Debugzeilen" das gleiche raus, wenn ich auf die Taste "n" drücke?
PureBasic v3.94 (Windows - x86) (Demo)
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Code: Alles auswählen

OpenConsole()
Repeat
  key$=Inkey()
  Delay(20)
Until key$<>""
Debug Asc(key$) ; <--- geändert, Key und Key$ sind zwei verschiedene Variablen
Debug #PB_Key_N
CloseConsole()
#PB_Key_ ist Scancode der Tastertur. Der Scancode wird erst mit der eingestellten Sprache übersetzt.

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Der Befehl Inkey()

Beitrag von Kaeru Gaman »

obbba hat geschrieben:

Code: Alles auswählen

Debug PeekB(@key+1)
ich versteh auch nicht, warum +1 ?

Code: Alles auswählen

Debug PeekB(@key$)
sollte doch gehen, oder?

um den Hinweis von mk nochmal ausführlicher zu wiederholen:
die tastatur-scancodes sind keine ASCII-codes.
was ja irgendwie logisch ist, da ja Cursor-Up und Backspace keine Zeichen sind.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
obbba
Beiträge: 53
Registriert: 06.02.2006 17:33

Beitrag von obbba »

Code: Alles auswählen

OpenConsole() 
Repeat 
  key$=Inkey() 
  Delay(20) 
Until key$<>"" 
Debug PeekB(@key$+1) 
Debug #PB_Key_N 
CloseConsole()
HA!!!

So geht's nämlich doch!! 8)

Lest euch den Befehl Inkey nochmal durch...

<)
PureBasic v3.94 (Windows - x86) (Demo)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Lest euch den Befehl Inkey nochmal durch...

ok.. in 3.94 wird der scancode noch an zweiter stelle mit übergeben.

aber in 4.0 ist das konzept komplett geändert, da gibts ne extra-funktion RawKey() für den Scancode.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Wer lesen kann ist im Vorteil :mrgreen:
Gibt einen "ein Zeichen"-String zurück
Du liest immer nur das NULLBYTE. "String Ende". allso ein Byte zu weit.

FF :wink:

MIST, ZU LANGSAM
Zuletzt geändert von mk-soft am 31.07.2006 14:07, insgesamt 1-mal geändert.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Wer lesen kann ist im Vorteil

genau, mk, lies mal obbbas signatur... ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Übersehen und jetzt gelesen. OK :(
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

hab ich ja auch zuerst überlesen, hätte schon beinahe ne blöde antwort geschrieben... ;)


@obbba

ich empfehle dir, mit folgendem konstukt zu arbeiten:

Code: Alles auswählen

I$ = Inkey() : I1$ = Left(I$,1) : I2$ = Right(I$,1)
und im anschluss nur noch I1$ und I2$ auszuwerten.

das mag erstmal kompliziert oder unsinnig aussehen,
aber es erleichtert die spätere umstellung auf 4.0 ungemein.

dann müsst du nämlich nur diese einzige zeile ersetzen durch:

Code: Alles auswählen

I1$ = Inkey() : I2$ = RawKey()
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten