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:

nur 2 tasten abfragen

 
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
Patrick-Ratz



Anmeldungsdatum: 22.12.2008
Beiträge: 34

BeitragVerfasst am: 01.12.2010, 13:59    Titel: nur 2 tasten abfragen Antworten mit Zitat

Hallo , ich bin seit neusten wieder mit qbasic am toch
und habe auch gleich eine frage:

ich hab jetzt ein menü programmiert und es tuts auch soweit.
zum auswählen habe ich nen pfeil gemacht ->
und man kann hoch und runter klicken
aber wenn ich versehntlich auf leertaste komme oder ne andere
taste kommt sofort die meldung:

"beliebige taste zum fortfaren drücken..."
und dann geht mein programm aus -

wie kann ich das unterbinden ??? also dass wenn ich trotzdem leertaste
drücke mein programm NICHT aus geht?

achja und welcher CHR$() ist denn enter ?
_________________
Wie kastriert man Windows-User?
Man schneidet das Mauskabel durch...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 01.12.2010, 14:05    Titel: Re: nur 2 tasten abfragen Antworten mit Zitat

Patrick-Ratz hat Folgendes geschrieben:
[...]wenn ich versehntlich auf leertaste komme oder ne andere taste kommt sofort die meldung:
"beliebige taste zum fortfaren drücken..."
und dann geht mein programm aus -
wie kann ich das unterbinden ??? also dass wenn ich trotzdem leertaste
drücke mein programm NICHT aus geht?


Die Meldung bedeutet dass dein Programm beendet wurde. Da ich deinen Code nicht kenne kann ich nur grundsätzlich antworten:
Ein Programm hält sich normalerweise mit einer Endlosschleife am Leben, in der immer wieder auf Benutzereingaben geprüft wird (wie z.B. Mausaktionen, Tastendrücke) und dann entsprechend darauf reagiert wird.


Patrick-Ratz hat Folgendes geschrieben:
achja und welcher CHR$() ist denn enter ?

13, afair

ansonsten kannst du dies mit einem Programm wie folgenden leicht herausfinden (ungetestet!):
Code:
do
Taste$ = INKEY$
print ASC(Taste$); " "; ASC(RIGHT$(Taste$,1))
loop until Taste$ = chr(27)

_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick-Ratz



Anmeldungsdatum: 22.12.2008
Beiträge: 34

BeitragVerfasst am: 01.12.2010, 14:48    Titel: Antworten mit Zitat

also der code sieht so aus:


Code:

CLS

xarrow = 8
yarrow = 18

PRINT "                  -------------------"
PRINT "                 |                   |"
PRINT "                 | Smilly-Runner 1.2 |"
PRINT "                 |                   |"
PRINT "                 |                   |"
PRINT "                  -------------------"

PRINT "                    Spiel Start"
PRINT "                    Spiel Option"
PRINT "                    Spiel Beenden"

1

LOCATE xarrow, yarrow

PRINT "->"

DO:
taste$ = INKEY$:
LOOP WHILE taste$ = ""

IF taste$ = CHR$(0) + CHR$(80) THEN
LOCATE xarrow, yarrow
PRINT "  "
xarrow = xarrow + 1
GOTO 1
END IF


IF taste$ = CHR$(0) + CHR$(72) THEN
LOCATE xarrow, yarrow
PRINT "  "
xarrow = xarrow - 1
GOTO 1
END IF




der code ist erst paar stunden alt deswegen auch noch sehr "nackt"

achja gibs es auch was besseres als goto ???
_________________
Wie kastriert man Windows-User?
Man schneidet das Mauskabel durch...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 01.12.2010, 15:33    Titel: Antworten mit Zitat

GOTO und GOSUB sollte man nicht verwenden. Ersatzweise kann man Schleifen daraus machen, wie etwa eine DO ... LOOP oder eine WHILE ... WEND. Eine andere Möglichkeit ist es, die Teile in Unterprogramme auszugliedern, also in eine SUB oder eine FUNCTION.

Wie man es auch macht, bitte nicht mit GOTO.

Ein Beispiel:
Code:
CLS

xarrow = 8
yarrow = 18

PRINT "                  -------------------"
PRINT "                 |                   |"
PRINT "                 | Smilly-Runner 1.2 |"
PRINT "                 |                   |"
PRINT "                 |                   |"
PRINT "                  -------------------"

PRINT "                    Spiel Start"
PRINT "                    Spiel Option"
PRINT "                    Spiel Beenden"

DO
   
   LOCATE xarrow, yarrow
   
   PRINT "->"
   
   DO
      taste$ = INKEY$:
   LOOP WHILE taste$ = ""
   
   IF taste$ = CHR$(0) + CHR$(80) THEN
      LOCATE xarrow, yarrow
      PRINT "  "
      xarrow = xarrow + 1
      
   ELSEIF taste$ = CHR$(0) + CHR$(72) THEN
      LOCATE xarrow, yarrow
      PRINT "  "
      xarrow = xarrow - 1
      
   ELSE
      EXIT DO
      
   END IF
   
LOOP
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 01.12.2010, 16:05    Titel: Antworten mit Zitat

oder so
Code:
Cls
xarrow = 8
yarrow = 18

Print "                  -------------------"
Print "                 |                   |"
Print "                 | Smilly-Runner 1.2 |"
Print "                 |                   |"
Print "                 |                   |"
Print "                  -------------------"

Print "                    Spiel Start"
Print "                    Spiel Option"
Print "                    Spiel Beenden"

Locate xarrow, yarrow
Print "->"

Do
  taste$ = InKey$

  If (taste$ = Chr$(0) + Chr$(80)) And (xarrow < 9) Then
    Locate xarrow, yarrow
    Print "  "
    xarrow = xarrow + 1
    Locate xarrow, yarrow
    Print "->"
  End If

  If (taste$ = Chr$(0) + Chr$(72)) And (xarrow > 7) Then
    Locate xarrow, yarrow
    Print "  "
    xarrow = xarrow - 1
    Locate xarrow, yarrow
    Print "->"
  End If
Loop until taste$ = Chr$(13)

If xarrow = 7 Then Print "Start"
If xarrow = 8 Then Print "Option"
If xarrow = 9 Then Print "Beenden"
sleep

_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
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: 01.12.2010, 16:44    Titel: Antworten mit Zitat

Von mir sonst ein Codebeispiel:

http://beilagen.dreael.ch/QB/MENUE.BAS

Wie dieses Beispiel zeigt, können komplexere Benutzeroberfläche mit geschickter Verwendung von SUB-Unterprogrammen mit sehr wenig Code realisiert werden.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Patrick-Ratz



Anmeldungsdatum: 22.12.2008
Beiträge: 34

BeitragVerfasst am: 01.12.2010, 23:19    Titel: Antworten mit Zitat

1000 DANK !

aber ich check nicht wie das programm mit enter bestätigt, weil in der if schleife steht ja nur:

Code:

IF "taste-oben" und "x = 9" DANN  ...

...
ende mit esc

_________________
Wie kastriert man Windows-User?
Man schneidet das Mauskabel durch...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick-Ratz



Anmeldungsdatum: 22.12.2008
Beiträge: 34

BeitragVerfasst am: 01.12.2010, 23:21    Titel: Antworten mit Zitat

grinsen upps habs gesehn das über until
_________________
Wie kastriert man Windows-User?
Man schneidet das Mauskabel durch...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
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
Seite 1 von 1

 
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