KeyboardInkey() , seltsames Verhalten zusammen mit Str()

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

KeyboardInkey() , seltsames Verhalten zusammen mit Str()

Beitrag von STARGÅTE »

Tachchen,

nach langer Bugsuche ist bei mir folgendes Problem aufgetreten:

Code: Alles auswählen

InitSprite()
InitKeyboard()

OpenWindow(0, 0, 0, 800, 600, "Screen", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 800, 600, 0, 0, 0)
 
DebugWert = 8
    
Repeat

 ClearScreen(0)

 FlipBuffers()
 
 ExamineKeyboard()
 
 Laber$ = Str(DebugWert)
 
 Text$ = KeyboardInkey()
 If Text$ : Debug Text$ : EndIf

Until WindowEvent() = #PB_Event_CloseWindow
Sobald ich irgendwo ein Str() verwende wird die Rückgabe von KeyboardInkey() verändert.
und zwar in der Weise, dass Tasten wie UMSCHALT, ALT, ENTF, usw. auch KeyboardInkey() dazu brinen ein Zeichen zurück zugeben.
Und jetzt kommts ! Es ist genau die erste Stelle der Zahl, die ich bei Str() übergebe.
setze ich DebugWert auf 3, bekomme ich beim drücke von UMSCHALT eine 3
Kommentiere ich das Str() komplett aus, erhalte ich bei den Tasten keine Rückgabestrings

Kann das jemand bestätigen, wenn ja ist das ein BUG, der irgendwie den Buffer von KeyboardInkey und Str vermischt ?
Zuletzt geändert von STARGÅTE am 16.08.2010 17:51, insgesamt 1-mal geändert.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Jilocasin
Beiträge: 665
Registriert: 13.05.2006 16:04
Kontaktdaten:

Re: KeyboardInkey() , seltsammes Verhalten zusammen mit Str(

Beitrag von Jilocasin »

Hier genauso, auch mit 4.51 RC 1, XP 32bit.

Edit: Es liegt definitiv am CALL _PB_Str@12
Lässt man den Call auf Str() weg (und repariert natürlich dabei die 12 Byte Stack), klappt auch KeyboardInkey() wie es sollte.
Schätze mal, da wird funktionsintern in PB irgendwas verwurstet.
Zuletzt geändert von Jilocasin am 16.08.2010 18:06, insgesamt 1-mal geändert.
Bild
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Re: KeyboardInkey() , seltsames Verhalten zusammen mit Str()

Beitrag von hjbremer »

in 4.50 RC2 hab ich das nicht
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: KeyboardInkey() , seltsames Verhalten zusammen mit Str()

Beitrag von STARGÅTE »

hm also n neueres Problem mit 4.51 ...
habs mal ins Bugforum gesteckt
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Christian+
Beiträge: 213
Registriert: 13.07.2008 10:05
Computerausstattung: Windows 8.1 Pro
AMD Phenom II X4 955 @ 3.2 GHz
4GB RAM
NVIDIA GeForce GTX 660

Re: KeyboardInkey() , seltsames Verhalten zusammen mit Str()

Beitrag von Christian+ »

Also ich kann das Problem bestätigen getestet mit PB 4.50 und 4.51.
Windows 8.1 Pro 64Bit | AMD Phenom II X4 955 @ 3.2 GHz | 4GB RAM | NVIDIA GeForce GTX 660
Jilocasin
Beiträge: 665
Registriert: 13.05.2006 16:04
Kontaktdaten:

Re: KeyboardInkey() , seltsames Verhalten zusammen mit Str()

Beitrag von Jilocasin »

Okay, habs mal mit Olly etwas analysiert. PB benutzt in dem Fall für Str() und KeyboardInkey() denselben Buffer. Das ist eigentlich schön und lobenswert. Das Problem ist aber: Str() schreibt etwas rein und KeyboardInkey() kehrt zurück mit einem String aus demselben Buffer, der aber vom KeyboardInkey() selbst nicht modifiziert wurde, wenn keine Taste gedrückt wurde, die es selbst als Zeichen darstellen kann (z.B. Shift, Escape, etc.).

Also doch ein KeyboardInkey()-Bug könnte man sagen :D
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: KeyboardInkey() , seltsames Verhalten zusammen mit Str()

Beitrag von STARGÅTE »

Ech interessant... Jetzt kann ich etwas besser verstehen, warum hier mal irgendeiner gemeint hat "seltsammes Verhalten von PB".

Ich war halt gerade dabei 'n Eingabefeld für 'n Spiel zu schreiben, meine modifizierte Inkey-Variante hat solo wunderbar funktioniert, im spiel jedoch nicht ...
Wieder hat es mich viele Stunden gekostet bis ich nach einander alle Möglichkeiten zusammen hatte ...
und dann "zum Glück" den Fehler durch Str() erklären konnte.
Eine Erklärung (die jetzt sogar noch bestätigt wurde) löst zwar das Problem nicht, aber man weiß wenigstens warum es da ist.

In diesem Fall lässt es sich zwar nur schlecht umgehen, aber ich hoffe mal es wird noch zur nächsten Version behoben.

Danke an der Stelle für genaue analysieren.


EDIT:

Gut mit andere String-Funktionen (Left, Right, Mid) gibs das gleiche Problem, nutzen demnach alle diesen Buffer.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Antworten