Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Frage zur INKEY$
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
pfiffikus_86



Anmeldungsdatum: 10.11.2004
Beiträge: 11

BeitragVerfasst am: 22.01.2005, 20:54    Titel: Frage zur INKEY$ Antworten mit Zitat

Grüß Gott,
ich hab mal eine Frage zu der INKEY$. Und zwar programmiere ich gerade an einer While/Wend Schleife, in der ich die Inkey$, Standart gemäß zum einlesen von Tasten benutze.
Nun meine Frage, ich will die Tasten "A" und "B" einlesen, wenn man aber eine andere, beliebige Taste drückt, soll etwas anderes (zum Beispiel ein BEEP) ausgeführt werden. Wie programmiere ich das???

Würde mich über Beispiel Codes freuen, Danke
_________________
Ich programmiere lieber, als aufs Klo zu gehen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 22.01.2005, 21:03    Titel: INKEY$ Antworten mit Zitat

Hallo!

Versuch mal das:

Code:


DO WHILE A$ <> CHR$(27) : REM solange, bis Escape gedrückt wird

A$ = INKEY$
REM Tastatur abfragen


IF A$ = "A" OR A$ = "B" THEN

 REM wenn A oder B gedrückt wird

ELSE IF A$ <> CHR$(27)
 
 REM Andernfalls
 BEEP

END IF


LOOP


END


Alles klar?

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 22.01.2005, 21:22    Titel: Antworten mit Zitat

Typischer Fall für ein CASE ELSE! Codebeispiel:
Code:

Drinbleib% = -1
DO WHILE Drinbleib%
  DO
    t$ = INKEY$
  LOOP WHILE t$ = ""
  SELECT CASE t$
  CASE "a", "A"
    ' Behandlung A gedrückt
  CASE "b", "B"
    ' Behandlungsroutine für <B>
  CASE CHR$(0) + "H"
    ' Behandlungsroutine für Pfeiltaste hoch
  CASE CHR$(27)
    Drinbleib% = 0   ' Verlassen
  CASE "0" TO "9"
    ' Behandlungsroutine Zifferntaste
  CASE ELSE
    ' alles übrige
    BEEP
  END SELECT
LOOP

_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
K.I.T.T.



Anmeldungsdatum: 24.01.2005
Beiträge: 79

BeitragVerfasst am: 24.01.2005, 16:04    Titel: Re: INKEY$ Antworten mit Zitat

jb hat Folgendes geschrieben:
Hallo!

Versuch mal das:

Code:


DO WHILE A$ <> CHR$(27) : REM solange, bis Escape gedrückt wird

A$ = INKEY$
REM Tastatur abfragen


IF A$ = "A" OR A$ = "B" THEN

 REM wenn A oder B gedrückt wird

ELSE IF A$ <> CHR$(27)
 
 REM Andernfalls
 BEEP

END IF


LOOP


END


Alles klar?

jb



Moin,
ich bin relativ neu beim Programmieren mit QBASIC und hab da auch noch ein paar Fragen, was die Tastenabfrage betrifft. Also, in der ersten Zeile:
DO WHILE A$ <> CHR$ (27)
Wieso kommt da jetzt <> hin? Und was bewirkt das da genau?
Und dann: ELSE IF A$ <> CHR$(27)
Bedeutet das, wenn ich dann ESC drücke, dass dann der Ton kommt? Ich weiß ja, dass 27 ESC ist. Aber in der ersten Zeile haben wir A$ noch keinen Wert gegeben. Könnte man in der ersten Zeile anstatt die Variable A$ auch einfach INKEY$ nehmen?
Danke im Voraus.

Gruß
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mecki
Igel


Anmeldungsdatum: 10.09.2004
Beiträge: 985
Wohnort: Niederbayern

BeitragVerfasst am: 24.01.2005, 16:22    Titel: Antworten mit Zitat

Hi KITT.. lächeln

Du hast nach den <> in obigem Source gefragt:

Code:
DO WHILE A$ <> CHR$(27)
...
ELSEIF A$ <> CHR$(27)


Also: Das heißt einfach nur, wenn A$ sowohl größer, als auch kleiner (mit einem Wort: ungleich) dem String 27 (also ESC) ist, dass er dann einen Piep-Ton macht, bzw, dass er solange die Schleife durchläuft, bis A$ ungleich der ESC-Taste ist.

Anstatt
Code:
DO WHILE A$ <> CHR$(27)
könnte man genausogut scheiben
Code:
DO UNTIL A$ = CHR$(27)

WHILE = Während, UNTIL = Bis - aber das weißt du ja wahrscheinlich selber zwinkern

Grüßle und noch viel Spaß mit QB,
Mecki

PS: Grundsätzlich musst du INKEY$ immer in eine Variable schmeißen - Inkey$ liest direkt den Tastaturpuffer aus. Bei der ersten Abfrage nach dem Inhalt von INKEY$ wäre dieser dann geleert, weil der Inhalt ja quasi in die Abfrage geflossen wäre. Somit ist er bei allen folgenden Abfragen leer, was eine Reaktion an dieser Stelle völlig vom zufall abhängig macht... Du musst also den Inhalt immer zuerst in eine Variable wie (hier A$) sichern, mit welcher du dann deine IF-Abfragen etc. durchführst.
_________________
» Yodl.de: So sucht man gestern. verwundert
» Geld verdienen im Netz + ICQ.
» Firefox!
» 100€ zu gewinnen
» FreeBASIC.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger MSN Messenger
Gremlin



Anmeldungsdatum: 12.12.2004
Beiträge: 142
Wohnort: Heinsberg

BeitragVerfasst am: 24.01.2005, 16:41    Titel: Antworten mit Zitat

Zitat:
Also: Das heißt einfach nur, wenn A$ sowohl größer, als auch kleiner (mit einem Wort: ungleich) dem String 27 (also ESC) ist, dass er dann einen Piep-Ton macht, bzw, dass er solange die Schleife durchläuft, bis A$ ungleich der ESC-Taste ist.

Besser sagt man entweder ... oder, denn 1 ist ja ungleich 2, aber nicht größer zwinkern
_________________
Tja, hier konnte ihre Werbung stehen.
Pech gehabt. zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
K.I.T.T.



Anmeldungsdatum: 24.01.2005
Beiträge: 79

BeitragVerfasst am: 24.01.2005, 16:43    Titel: Antworten mit Zitat

Moin,
aber könnte man nicht auch anstatt
a$ = inkey$
if a$ = "A" OR "a" then .................................
nicht auch einfach eine String Variable nehmen, also einfach ohne inkey$? Und muss man bei inkey$ eigentlich kein INPUT haben, sondern wird das nur ausgeführt, wenn man das nur drückt?

Gruß
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Gremlin



Anmeldungsdatum: 12.12.2004
Beiträge: 142
Wohnort: Heinsberg

BeitragVerfasst am: 24.01.2005, 18:17    Titel: Antworten mit Zitat

INKEY$ ist nicht irgendeine Variable, INKEY$ ist eine Funktion, die imemr das aktuell gedrückte Zeichen aus dem Tastaturbuffer (oder "P"? durchgeknallt ) zurückliefert.
_________________
Tja, hier konnte ihre Werbung stehen.
Pech gehabt. zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 24.01.2005, 18:19    Titel: Antworten mit Zitat

Ich hoffe, ich habe dich richtig verstanden...
Du willst jetzt anstatt INKEY$ INPUT verwenden... oder?
Dazu solltest du wissen:

INKEY$ und INPUT sind zwei paar Stiefel. Ehrlich gesagt basiert der eine auf den Anderen, so dass sie sich selber Blockeren. Ein (sehr einfacher) selbstgeschriebener INPUT-Ersatz könnte so aussehen:

Code:

DO
 i$ = INKEY$
 SELECT CASE i$
  CASE CHR$(8) 'ASCII-CODE für Backspace
   in$ = LEFT$(in$, LEN(in$) - 1)
  CASE CHR$(13) 'CODE für ENTER
   EXIT DO
  CASE CHR$(0) 'Wenn keine Taste gedrückt wird.
'Verhindert, dass dann das nächste Event ausgelöst wird....

  CASE ELSE
   in$ = in$ + i$
 END SELECT
 LOCATE zeile, spalte
 PRINT i$
LOOP


Sicher, du kannst deine Tastaturabfrage auch mit INPUT machen, aber das erzeugt eben immer eine Textausgabe auf dem Bildschirm, und währenddessen können keine anderen Befehle ausgeführt werden.

Wie du übrigens aus dem Code sehen kannst:
Wenn gerade nichts gedrückt wird, liefert INKEY$ einfach CHR$(0) zurück. (In manchen Turorials wird das einfach als "" dargestellt.)


Ich hoffe, ich konnte dir helfen!
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 24.01.2005, 19:00    Titel: Antworten mit Zitat

WICHTIG::::

Schreibe nie if inkey$ = "a" OR "A". das funktioniert nicht.
if inkey$ = "a" OR inkey$ = "A" würde funktionieren
if lcase$(inkey$) = "a" wäre am einfachsten, LCase tut Großbuchstaben in Kleinbuchstaben umwandeln.
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 24.01.2005, 19:19    Titel: Antworten mit Zitat

Ach, funzt bitweises komplementieren auch bei Strings?

Ich weiß zwar, dass 10 AND 6 = 2, aber ned, dass des auch bei strings geht!
Wird dann von jedem Element der ASC geANDet, oder wie läuft des?
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 24.01.2005, 21:12    Titel: Antworten mit Zitat

Ich weiß ned was bei String AND String passiert, aber nicht das was gewünscht ist.
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
K.I.T.T.



Anmeldungsdatum: 24.01.2005
Beiträge: 79

BeitragVerfasst am: 25.01.2005, 14:59    Titel: Antworten mit Zitat

Moin,
sorry für mein Generve, aber so wie ich das sehe, muss ich immer INKEY$ und CHR$ zusammen verwenden oder?

Gruß
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mecki
Igel


Anmeldungsdatum: 10.09.2004
Beiträge: 985
Wohnort: Niederbayern

BeitragVerfasst am: 25.01.2005, 15:05    Titel: Antworten mit Zitat

Nein, nicht unbedingt lächeln
Code:
CHR$(Nummer)
heißt einfach nur, dass du das Nummer'ste Ascii-Zeichen aus der Code-Tabelle haben möchtest.

Statt
Code:
IF K$ = "A" THEN ...
Könntest du also auch schreiben
Code:
IF K$ = CHR$(65) THEN ...
Da "A" das 65te Zeichen ist.
Nur manche Tasten kann man nicht direkt wie oben reinschreiben, zum Beispiel die ESC-Taste, oder die Funktions-Tasten.
Darum braucht man für diese den CHR$-Befehl sehr häufig.

Zitat:
Enter = 13
ESC = 27
" = 34 (schließlich kann man nicht schreiben IF K$ = """ THEN .. grinsen )


Und für ganz besondere Tasten (z.B. Strg links und rechts, Alt usw) musst du das ganze sogar selber machen, da reicht CHR$ dann auch nicht mehr zwinkern

Grüßle,
Mecki
_________________
» Yodl.de: So sucht man gestern. verwundert
» Geld verdienen im Netz + ICQ.
» Firefox!
» 100€ zu gewinnen
» FreeBASIC.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger MSN Messenger
K.I.T.T.



Anmeldungsdatum: 24.01.2005
Beiträge: 79

BeitragVerfasst am: 25.01.2005, 16:16    Titel: Antworten mit Zitat

a$ = inkey$
if a$ = "a" then beep

Eigentlich könnte ich dafür auch folgendes schreiben:
a$ = inkey$
if a$ = Chr$ (Code für a) then beep
Wenn ich da richtig liege, hab ich es kapiert.

Gruß K.I.T.T.

PS: Wie sind eigentlich die Codes für die Pfeiltasten?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
stef



Anmeldungsdatum: 13.01.2005
Beiträge: 102

BeitragVerfasst am: 25.01.2005, 17:19    Titel: Antworten mit Zitat

Bei Sondertasten wie die Pfeiltasten werden gleich zwei Zeichen von INKEY$ zurück gegeben.
Das erste Zeichen hat immer den Code 0; das zweite hängt von der jeweiligen Taste ab.
Also erzeugt man einfach die beiden Zeichen und fügt sie zusammen:

IF a$ = CHR$(0) + CHR$(80) THEN PRINT "Pfeil nach unten wurde gedrückt"

Hier noch ein kleines nützliches Programm, das den ASCII-Code der jeweils gedrückten Taste ermittelt:
Code:
'Gibt von jeder eingegeben Taste den ASCII-Code zurück.
'Beenden: ESC
CLS
DO
   l$ = INKEY$

   IF LEN(l$) = 1 THEN              'Einfacher Code
      PRINT l$ + " = "; ASC(l$)
   ELSEIF LEN(l$) = 2 THEN          'Zweifacher Code
      PRINT " chr$(0) + chr$("; ASC(RIGHT$(l$, 1))
   END IF
LOOP UNTIL l$ = CHR$(27)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
K.I.T.T.



Anmeldungsdatum: 24.01.2005
Beiträge: 79

BeitragVerfasst am: 25.01.2005, 17:53    Titel: Antworten mit Zitat

Moin,
aber 80 ist der Code für P???

Gruß
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 25.01.2005, 18:10    Titel: Antworten mit Zitat

Hallo.

Ja, CHR$(80) ist in der Tat "P", aber CHR$(0)+CHR$(80) kann schon was ganz anderes sein. Was es ist, hab ich gerad nicht nachgeschlagen, aber dem Mecki kannst du in der Regel schon glauben. zwinkern

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
K.I.T.T.



Anmeldungsdatum: 24.01.2005
Beiträge: 79

BeitragVerfasst am: 25.01.2005, 18:18    Titel: Antworten mit Zitat

Moin,
ich glaub ihn ja, nur das wollte ich nochmal wissen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 25.01.2005, 18:56    Titel: Cursortastenabfrage mit INKEY$ Antworten mit Zitat

Hallo!

Anstatt

CHR$(0) + CHR$(80)

( d.h immer CHR$(0) + CHR$(ASCII Code von H, M, P oder K) )

etc. kannst du auch

CHR$(0) + "H" nach oben
CHR$(0) + "M" nach rechts
CHR$(0) + "P" nach unten
CHR$(0) + "K" nach links

nehmen.

Kann man sich vielleicht ein bisschen besser merken...

Für Spiele ist das aber nicht so gut geeignet, da INKEY$ zu langsam ist,
INP(96) wäre dafür besser.

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz