Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
jh35104
Anmeldungsdatum: 15.02.2011 Beiträge: 12
|
Verfasst am: 22.04.2011, 21:27 Titel: Zeilenversatz bei "falschen" >>INPUT<< |
|
|
Hallo zusammen mich quält folgende Frage!!!
Wie funktioniert es, bei einer falschen Eingabe bei einem Inputbefehl den Satz " Bitte korrigieren Sie......." an eine beliebiege Stelle des Bildschirms zu setzen?????
_______
CLS
SCREEN 12
LOCATE 1,1: INPUT "Geben Sie die gewünschte Anzahl ein: ", a
'eine falsche Eingabe wäre jetzt z.Bsp.: hklafh
' a darf den wert 0000 bis 9999 haben
' die Begrenzung des Werts habe ich mit IF a >9999 und GOTO + Marke (ja ich weiß GOTO ohje.... ) gemacht
' wenn jetzt z.Bsp.: hklafh (zufällige Tastenauswahl mit ganzer Hand) eingegeben wird zerstörrt die Meldung meinen Bildaufbau
' ich stelle mir so was in der Art vor
LOCATE 24,1: //"FEHLERMELDUNG+Korekturwert"//
Also eine Art Statuszeile in der unteren Bildschirmzeile
Wer hat da Erfahrung und eine einfache umsetzbare Idee für das Problem
DANKE für Eure Hilfe |
|
Nach oben |
|
 |
XOR
Anmeldungsdatum: 23.07.2010 Beiträge: 161
|
Verfasst am: 22.04.2011, 22:23 Titel: |
|
|
Hi, ich schreibe zwar immer in FB, das sollte aber auch in QB funzen.
Ich benutze die oberste zeile um eine Message auszugeben.
Code: | Dim Shared __StatusBarSize__ As Integer
Dim Shared __ConsoleRows__ As Integer
Sub InitStatusBar ( ByVal Size As Integer = 80, ByVal ConsoleRows As Integer = 25)
View Print 2 To ConsoleRows
__StatusBarSize__ = Size
__ConsoleRows__ = ConsoleRows
End Sub
Sub StatusBarPrint ( ByVal Stri As String )
Dim As Integer Row,Posi,Low
Dim As String Leer
Row = CsrLin
Posi = Pos
View Print 1 To 2
Locate 1,1
For i As Integer = 1 To __StatusBarSize__-Len(stri)-1
Leer += " "
Next
Print Stri+Leer
View Print 2 To __ConsoleRows__
Locate Row, Posi
End Sub
InitStatusBar ()
StatusBarPrint ( "StatusBar" )
Locate 1,1
For i As Integer = 0 To 30
Print i
Sleep 100,1
Next
StatusBarPrint ( "kann sich veraendern" )
sleep |
ich hoffe das konnte helfen. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 22.04.2011, 23:31 Titel: |
|
|
Zitat: | LOCATE 24,1: //"FEHLERMELDUNG+Korekturwert"// |
Wenn ich dich richtig verstehe, dann willst du eine Meldung in die letzte Bildschirmzeile setzen, ohne dass es dir anschließend den Bildschirm nach oben schiebt. Grund für das Verschieben ist der Zeilenumbruch am Ende der Ausgabe, aber den kannst du mit einem Strichpunkt ; am Ende des PRINT unterdrücken:
Code: | LOCATE 24, 1
PRINT "Bitte korrigieren Sie......."; |
_________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
jh35104
Anmeldungsdatum: 15.02.2011 Beiträge: 12
|
Verfasst am: 23.04.2011, 08:48 Titel: |
|
|
Hallo zusammen Danke für die Lösungsvorschläge.
Leider ist mir nicht ganz geholfen. Bei dem Problem geht es um eine Interne QB-Fehler-Meldung wenn ich z.Bsp.: einer SINGLE VARIABLE einen Buchstaben ($) zuordne, was ja logischerweise nicht geht. Also diese Fehlermeldung die dann erscheint zerstört mein Bildaufbau. Wie kann ich diese bändigen?
MfG |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 23.04.2011, 11:05 Titel: |
|
|
Um einen String in eine Zahl zu verwandeln, gibt es den Befehl VAL. Ich habe da in etwa so gearbeitet:
Code: | eingegebeneZahl = VAL(benutzereingabe)
IF (eingegebeneZahl <= 0 OR eingegebeneZahl > 9999) AND benutzereingabe <> "0" THEN
fehlermeldung("Eingabe zu groß oder zu klein oder keine Zahl")
END IF |
Strings, die keine Zahl darstellen (z. B. "hklafh ") liefern den Wert 0 zurück; und mit der Überprüfung AND benutzereingabe <> "0" stellst du sicher, dass eine Eingabe der Zahl "0" erlaubt ist.
Nicht zu verhindern ist mit dieser Methode, dass "123abc" erlaubt ist; das ergibt dann die Zahl 123. Nicht erlaubt ist dagegen "0.0"; wenn du das auch noch alles abfangen willst, wird es aber ein gutes Stück komplizierter (in diesem Fall würde ich eiche handgeschriebene INPUT-Routine empfehlen). _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
jh35104
Anmeldungsdatum: 15.02.2011 Beiträge: 12
|
Verfasst am: 23.04.2011, 11:41 Titel: |
|
|
DANKE!!!
So Funktioniert das?!?
Hat mir sehr weitergeholfen. Ich musste die Bedingung <0 auf <1 ändern weil sonst bei die $Eingabe das Programm ohne Korrekturmöglichkeit weitergelaufen wäre:
'ez=eingabe Zahl
'a$=Stringeingabemöglichkeit
cls
screen 13
neu:
cls
locate 1,1 : input"EINGABE: ";a$
ez = Val(a$)
if ez < 1 or ez >9999 then
goto neu:
end if
cls
locate 2,1 "AUSGABE:", ez
sleep
end
FROHE OSTERN
P.S.: Wie würde das mit ON ERROR // ERR = 13 gehn??? |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 23.04.2011, 12:08 Titel: |
|
|
Mit ON ERROR bin ich nicht mehr sonderlich vertraut; geht in etwa so:
Code: | ON ERROR GOTO fehler
erzeugeDenFehler
' ... weiter im Programm
fehler:
IF ERR = gewueschteFehlerNr THEN
PRINT "Dieser und jener Fehler ist aufgetreten!"
END IF
' geht natürlich auch schön mit SELECT CASE
' anschließend je nach Wunsch END oder RESUME oder RESUME NEXT |
_________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
jh35104
Anmeldungsdatum: 15.02.2011 Beiträge: 12
|
Verfasst am: 23.04.2011, 12:37 Titel: |
|
|
so in der Art hab ich das versucht aber ERR 13 (Datentyp %><$) wurde nicht erkannt sondern immer ERR 20 in diesem FALL kein FEHLER angezeigt
NAJA
Die Lösung mit Umwandeln der $ in % mit VAL geht gut und ist nicht viel Aufwand in meinem speziellen Fall.
DANKE nochmals
 |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 23.04.2011, 12:43 Titel: |
|
|
Um den "RESUME ohne Fehler" zu vermeiden, darf dein Programm natürlich nicht ohne Fehler in die Fehlerroutine hineinlaufen - also vor der Fehlerroutine das Programm beenden.
Code: | ON ERROR GOTO fehler
' ... Programmablauf ...
END
fehler:
' Fehlerbehandlung |
Die Umwandlung ist aber auf jeden Fall die bessere Lösung - die ON-ERROR-Fehlerroutine ist eigentlich eher ein Notfallprogramm für alles, was du nicht schon frühzeitig abfangen kannst. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
|