Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
spawn
Anmeldungsdatum: 09.08.2005 Beiträge: 45
|
Verfasst am: 29.08.2005, 23:08 Titel: Eingabeschleife |
|
|
Hi,
Folgendes Problem.
Um während einer Eingabe die SysZeit anzeigen zun lassen muss ich die Eingabe natürlich in eine Schleife fassen damit die Zeit ständig aktualisiert wird.
Ich lese die Tastatureingabe mit A$ = INKEY$ ein und lasse dann die Variable (z.B. Name$ immer + A$ werden.
Wie würde das Inkey nun für Backspace sein und mit welchem Algorythmus lasse ich Name$ dann wieder -1 werden???
Vielen Dank
Guido |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 29.08.2005, 23:20 Titel: |
|
|
Du könntest LEFT$ verwenden:
Code: | DO
' ... Zeit anzeigen
a$ = INKEY$
SELECT CASE ASC(a$)
CASE 32 TO 122 ' Space bis kleines z
name$ = name$ + a$
CASE 8 ' Backspace
IF LEN(name$) THEN name$ = RIGHT$(name$, LEN(name$) - 1)
CASE 13 ' Enter
EXIT DO
END SELECT
LOOP |
(nicht getestet, sollte aber funzen)
Have a nice day
Ciao _________________ 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 |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 30.08.2005, 14:04 Titel: |
|
|
@Dusky: Das muss
Code: |
name$ = LEFT$(name$, LEN(name$) - 1)
|
heißen.
Hast du ja auch gesagt, nur irgendwie nicht geschrieben.
@ spawn: Das hättest du aber auch in der MonsterFAQ gefunden.
jb
Zuletzt bearbeitet von jb am 03.09.2005, 11:20, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
spawn
Anmeldungsdatum: 09.08.2005 Beiträge: 45
|
Verfasst am: 31.08.2005, 20:54 Titel: |
|
|
ja - sorry
ich schreibe grade ein Prog, das relativ schnell fertig sein sollte, ich habe nicht die Zeit alles nachzulesen, was ich nicht weis.
Ich weis ja nicht was drin stht und was nicht.
eine frage noch: wie muss ich denn ABC() dimensionieren?
vielen Dank für die Antworten
Guido |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 31.08.2005, 21:02 Titel: |
|
|
Du meinst wohl ASC(), und das ist kein Array, sondern eine feststehende Funktion
jb |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
OdinX

Anmeldungsdatum: 29.07.2005 Beiträge: 253 Wohnort: SG Schweiz
|
Verfasst am: 01.09.2005, 13:06 Titel: |
|
|
Qb4.5 hat schon eine ascii-tabelle enthalten.
unter "hilfe > themen > ASCII-Zeichencodes" findest du sie. |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 01.09.2005, 15:27 Titel: |
|
|
Und um das noch zu komplettieren, die Gegenfunktion zu
ist
Diese wandelt einen ASCII-Wert in ein Zeichen um; analog zu Sebastians Beispiel:
Code: |
PRINT CHR$(65) 'ergibt "A"
PRINT CHR$(48) 'ergibt "0"
|
jb |
|
Nach oben |
|
 |
Thomas Antoni

Anmeldungsdatum: 12.10.2004 Beiträge: 220 Wohnort: Erlangen
|
Verfasst am: 14.09.2005, 19:59 Titel: Man kann d.Uhrzeit auch mit ON TIMER unabh. v.Hauptprg anz. |
|
|
Man kann die Uhrzeit auch mit ON TIMER unabhängig vom Hauptprogramm anzeigen. Wie das geht, steht in der QB-MonsterFAQ unter
"Datum/Uhrzeit und Bildung von Wartezeiten -> Wie kann man die Uhrzeit unabhägig vom Hauptprogramm anzeigen?" _________________ +++ Die beliebte QBasic CD-ROM von QBasic.de - 670 MB QBasic-Stuff mit komfortabler HTML-Oberfläche. Für nur 5 EUR bestellbar auf www.antonis.de/qbcdueb.htm +++ |
|
Nach oben |
|
 |
pinkpanther

Anmeldungsdatum: 28.05.2005 Beiträge: 79 Wohnort: Wien
|
Verfasst am: 20.09.2005, 16:54 Titel: |
|
|
Die Zeit mit Hilfe von ON TIMER(1) - wie im Monster-FAQ-Beispiel angeführt - sekundenaktuell anzeigen zu lassen, ist eine ziemlich performance-feindliche Vorgangsweise: Man stelle sich vor, dass der Compiler in Programmabschnitten, in denen diese Pseudo-Ereignisverfolgung aktiv ist, nach jeder benutzergenerierten Programmzeile prüfen lässt, ob das zu überwachende Ereignis eingetreten ist.
Lösungen:
(1) Wenn nicht gerade auf Benutzereingabe gewartet wird (Menüs, Eingabefelder...), sondern Daten verarbeitet werden (z.B. Berechnungsvorgänge, Auslesen einer Datei) Ereignisverfolgung jedenfalls mit TIMER STOP deaktivieren.
(2) Eventuell auf sekundengenaue Auflösung verzichten und die Uhrzeit lediglich als Stunden und Minuten anzeigen (in der DOS-Box unter Windows können die Intervalle zwischen den Sekunden zudem ziemlich schwanken!)
(3) "Echte" Ereignisverfolgung programmieren - das allerdings ist wohl absoluten (ASM-)Profis vorbehalten.
A propos Eingabefelder:
Ich habe bemerkt, dass die Ereignisverfolgung offenbar aussetzt, während INPUT auf Benutzereingabe wartet - siehe folgendes Beispiel (gilt auch für INPUT$):
Code: | ON TIMER(1) GOSUB zeitAusgabe
TIMER ON
CLS
GOSUB zeitAusgabe
LOCATE 4, 1
INPUT "Geben Sie bitte irgend etwas ein: ", A$ 'Uhrzeit wird nicht aktualisiert!
END
zeitAusgabe:
LOCATE 1, 1
PRINT TIME$
RETURN |
Lösung:
Den Befehl INPUT durch folgende Zeilen ersetzen:
Code: | PRINT "Geben Sie bitte irgend etwas ein: ";
WHILE LEN(INKEY$) = 0: WEND |
Möchte man aber nicht bloß auf eine beliebige Taste warten, sondern einen ganzen String einlesen, ohne den INPUT-Befehl zu verwenden, wird's gerade für Anfänger mühsam.
Das sei nur der Vollständigkeit halber ergänzt.
lG
pinkpanther  |
|
Nach oben |
|
 |
|