Zahlen Eingabe
Übersicht

![]() |
BB-FreakBetreff: Zahlen Eingabe |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hätte bei meinem Programm gerne mehere Fenster,
in die ich eine Zahle eingeben kann(ich kann die Fenster anklicken), die dann in einer Variable(als Zahl(auch Kommazahlen)) gespeichert wird die ich dann in eine Rechnung einfügen kann. Ich hab schon mal im Codearchiev nach gekuckt, es ist aber schwer sachen die jemand anderes geschrieben hat zu verstehen und sie Anzupassen. Brauch dringend hilfe, weil ichs einfach nicht auf die Reihe grig so was zu basteln ![]() Ihr müsst mir keine vollständigen Codes posten, ein paar denk ansetze reichen mir ![]() ![]() |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Fang erst mal mit einer einzelnen Input Routine an.
![]() ![]() ![]() ![]() Spezifische Hilfe gibt's bei spezifischer Fragestellung ![]() |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hier machen Anfänger oft einen Denkfehler:
Der optische Eindruck eines Programms deckt sich oft nicht mit den wirklich dahinterliegenden Abläufen. In Deinem Beispiel wird es so aussehen, als ob der User die Zahlen in die Fenster eingibt. Aber es wird eben nur so aussehen.... In Wirklichkeit ist es immer die gleiche Routine, die Tastendrücke auswertet und Variablen zuordnet. Das Malen der Fenster und die Mausauswertung sind ein davon unabhängig laufender Prozess. folgende diesen Schritten, lies aber Schritt 2 wirklich erst, wenn Du Schritt 1 zum Laufen gebracht hast. Schritt I: schreib ein Programm, das einen Tastendruck auf die 4 auswertet und den Wert in eine Variable ZahlAusGetKey% speichert. benötigte Befehle: If... , GetKey()..., Print... Tipp: ein Drücken der "4" liefert den AscII-Code 52 zurück. Die Rückgabe-Wert 0, sowie alles über 57 oder unter 48 muss unberücksichtigt bleiben. Wenn man von diesen Tastatur-Codes nun 48 abzieht, erhält man also die Zahl. Schritt II: benötigte Befehle: 10x If... erweitere das Ganze auf alle 10 Tastatur-Codes (Ziffern). Alle schreiben zunächst in die ZahlAusGetKey%. Schritt III: versuche die bereits gespeicherte Variable mit dem nächsten Tastendruck zusammenzuaddieren. benötigte Befehle: + Tipp : BlitzBasic: [AUSKLAPPEN] ZahlAusGetKey% = 10*A% + ZahlAusGetKey%
...schiebt die vorletzte Ziffer in die Zehnerstelle. Es geht aber auch über Strings. Schritt IV: Male 5 Rechecke und werte aus, in welches die Maus geklickt hat. benötigte Befehle: MouseX() , MouseY() , Rect... , If... Tipp: Aus MouseX() / (Abstand der Rechtecke) lässt sich schön eine Vaiable MAUS_WO% zwischen 0 und 4 erhalten Schritt V: Dimensioniere ein Feld A%[5], statt nur mit einer Variablen zu arbeiten. Verwende nun das zuletzt entstandene MAUS_WO%, um jeweils die entsprechende der 5 Variablen in der GetKey() Routine zu verändern. benötigte Befehle: DIM.... Text... Tipp: A%[ MAUS_WO% ] = 10 * A%[ MAUS_WO% ] + ZahlAusGetKey |
||
- Zuletzt bearbeitet von Midimaster am Mo, Mai 23, 2011 9:45, insgesamt einmal bearbeitet
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich will ja nicht meckern an deiner Erklärung, aber ich finde Keyhit für eine Eingabe routine (seien es auch nur Zahlen) ziemlich unangebracht. Wie Xeres schon geschrieben hatte, sollte man das besser mit GetKey![]() ![]() mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
da hast du recht...ich hab es gleich geändert. | ||
![]() |
BB-Freak |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielen Dank ![]() Ich werd mich in naher Zukunft mal dran setzen ![]() ![]() Edit: ![]() ![]() ![]() Edit2: UPDATE ![]() UPDATE ![]() Man dieser blöde Float vermasselt mir alles ![]() ![]() ![]() ![]() die Float ungenauigkeit kann man nicht beheben oder ? Code: [AUSKLAPPEN] Global ZahlAusGetkey%
Global Zahl# Global Zahl_Komma=10 Global Kommazahlen Global EingegebeneZahl# Repeat Cls If ZahlX Then Text 10,10,EingegebeneZahl# Text 10,25,Zahl# EndIf Eingabefeld_Zahlen(10,40) Flip Until KeyDown(1) Function Eingabefeld_Zahlen(X,Y) ZahlAusGetkey% = GetKey() If KeyHit(51) Then Kommazahlen=1 EndIf If Kommazahlen=1 Then Text X,Y+15,"Kommazahlen" Else Text X,Y+15,"Ganzezahlen" EndIf If ZahlAusGetkey%>47 And ZahlAusGetkey%<58 And Kommazahlen=1 Then EingegebeneZahl#=ZahlAusGetkey%-48 Zahl#=EingegebeneZahl#/Zahl_Komma+Zahl# Zahl_Komma=Zahl_Komma*10 EndIf If ZahlAusGetkey%>47 And ZahlAusGetkey%<58 And Kommazahlen=0 Then EingegebeneZahl#=ZahlAusGetkey%-48 Zahl#=EingegebeneZahl#+Zahl#*10 EndIf If KeyHit(14) And Zahl#>1 Then If Kommazahlen=0 Then Zahl#=(Zahl#-EingegebeneZahl#)/10 Else Zahl#=Zahl#-EingegebeneZahl#/(Zahl_Komma/10) Zahl_Komma=Zahl_Komma/10 EndIf EndIf If KeyHit(42) Then Zahl#=0 Rect X-2,Y-2,120,17,0 Text X,Y,Zahl# End Function |
||
![]() |
BB-Freak |
![]() Antworten mit Zitat ![]() |
---|---|---|
sry für den doppel post ![]() ![]() ![]() ![]() wollte nur nochmal auf den threat aufmerksam machen. |
||
![]() |
Ana |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielleicht selbst einen Caster schreiben? Weiß nicht ob der es besser macht, da ich kein BB da hab aber versuchs mal damit, ist halt in BMax aber sollte ja nicht so viel anders sein
BlitzMax: [AUSKLAPPEN] Function FloatConvert:Float(S:String) |
||
Don't only practice your art,
but force your way into its secrets, for it and knowledge can raise human to divine |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo BB-Freak,
du schreibst , du brauchst die Fließkommazahlen für eine "Rechnung". Wenn Du damit nicht eine "Rechenaufgabe" sondern eine Rechnung im kaufmännischen Sinn meinst, bietet sich an, gar nicht mir Fließkommazahlen, sonder mit Integer zu arbeiten. Statt in EURO mit Nachkommastellen zu arbeiten, verarbeitest Du nur CENT-Werte und umgehst damit einige Probleme: z.b.: Ungenauigkeit bei Rundung oder... Nachkomma-Nullen: "1.50 + 2.50 = 3.00" statt "1.5 + 2.5 = 3" Nach der Eingabe des Users multiplizierst du die Zahl einfach mit 100 und speicherst sie als INT ab. Zitat: Input1= 1.2
Wert=120 Input2 =.50 Wert=50 Summe aus Input1 und Input2 = 170 Bei der Ausgabe z.b. am Bildschirm setzt du einfach einen Punkt vor die vorletzte Ziffer: Zitat: Wert=170
Ausgabe-String=1.70 Nachtrag: Die Eingaben des Users könntest Du auch solange als String zwischenspeichern, bis der User RETURN gedrückt hat. Dies erleichert das Reagieren auf BACKSPACE und manch andere Aktion (z.b. Cursor-Moving), die der User vielleicht noch vor RETURN durchführt. Erst nach dem Return wird dann aus dem String eine INTEGER-Zahl. In solch einer Umgebung kann der User auch beliebig Komma oder Punkt als Trennzeichen verwenden, etc... |
||
![]() |
BB-Freak |
![]() Antworten mit Zitat ![]() |
---|---|---|
das klingt jetzt vtl. ein bisschen dumm aber wie genau meinst du das ? ![]() Wie soll ich trotzdem eine Komma Zahl anzeigen wenn ich doch eigentlich keine hab ![]() das mit dem mal 100 verstehe ich ja ^^ ![]() Code: [AUSKLAPPEN] Text 10,10,Zahl+","+Kommazahl
und mach dann für Rechnen: Code: [AUSKLAPPEN] ZahlzumRechnen=Zahl*100+Kommazahl
oder ? Vielen Dank nochmal hat mir sehr geholfen ![]() Courser Moving klingt interesant wie macht man das am besten ![]() |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du musst das gar nicht als zwei Variablen mitlaufen lassen. Die Rückkonvertierung erfolgt erst bei der Ausgabe:
BlitzBasic: [AUSKLAPPEN] Wert=170 oder als Funktion: BlitzBasic: [AUSKLAPPEN] Wert%=125 |
||
![]() |
BB-Freak |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab nen kleines Problem beim Proggen ![]() Ich hab mich erst mal an die Ganzenzahlen gesetzt ![]() nur weiß ich nicht wie ich verhindern kann, dass meine Function unaufhörlich Types produziert ![]() Code: [AUSKLAPPEN] Global ZahlAusGetkey%
Global mb Global Erstellt Type Eingabefelder Field X,Y,Ausgewaehlt,Zahl End Type Repeat Cls mb=MouseHit(1) Eingabefeld_Zahlen(10,40) Eingabefeld_Zahlen(10,80) Flip Until KeyDown(1) Function Eingabefeld_Zahlen(X,Y) ZahlAusGetkey% = GetKey() Text 100,10,Erstellt If B=0 Then Eingabefeld.Eingabefelder = New Eingabefelder Erstellt=Erstellt+1 For Eingabefeld.Eingabefelder = Each Eingabefelder If Eingabefeld\X=0 And Eingabefeld\Y=0 Then Eingabefeld\X=X Eingabefeld\Y=Y EndIf Next B=1 EndIf For Eingabefeld.Eingabefelder = Each Eingabefelder If mb=1 Then Eingabefeld\Ausgewaehlt=0 If RectsOverlap(MouseX(),MouseY(),1,1,Eingabefeld\X,Eingabefeld\Y,85,17) Then Eingabefeld\Ausgewaehlt=1 EndIf EndIf If ZahlAusGetkey%>47 And ZahlAusGetkey%<58 And Eingabefeld\Zahl<999999999 And Eingabefeld\Ausgewaehlt=1 Then EingegebeneZahl=ZahlAusGetkey%-48 Eingabefeld\Zahl=EingegebeneZahl+Eingabefeld\Zahl*10 EndIf If KeyHit(14) Then Eingabefeld\Zahl=(Eingabefeld\Zahl-EingegebeneZahl)/10 EndIf If KeyHit(42) Then Eingabefeld\Zahl=0 If Eingabefeld\Ausgewaehlt=1 Then Color 0,255,0 Else Color 255,255,255 EndIf Rect Eingabefeld\X-2,Eingabefeld\Y-2,85,17,0 Text Eingabefeld\X,Eingabefeld\Y,Eingabefeld\Zahl Next End Function |
||
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich bin zwar nicht wirklich mit dem Plan dieses Threads hier vertraut, aber ich glaube, ich habe einen Schreibfehler gefunden:
BlitzBasic: [AUSKLAPPEN]
Wenn ich mich nicht irre, hälst du garkeine Variable 'B' Lediglich Global ZahlAusGetkey% Global mb Global Erstellt - Da ich nicht genau weiß wie BlitzBasic funktioniert, aber ähnliche Sachen aus Blitzmax kenne, will ich vermuten, das B=0 immer True ist, da B nicht existiert. Schaue dir die entsprechende Stelle noch einmal an ![]() |
||
![]() |
BB-Freak |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Problem ist , dass ich mir selbst nicht sicher bin ![]() Normalerweiße wird sobald ich die Variable schreib automatisch eine ertsellt ![]() Und ich will, dass die Variable in der Function bleibt damit es nicht nur einmal funktioniert ![]() |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das von Dir verwendete Flag B% ist tatsächlich nur lokal in der Funktion gültig und wird daher bei jedem neuen Aufruf immer wieder 0 sein. Schreibe es GLOBAL an den Anfang deines Codes:
BlitzBasic: [AUSKLAPPEN] Global ZahlAusGetkey% Vielleicht wäre es besser das Erstellen vorneweg zu machen, dabei auch eine ID zu vergeben: BlitzBasic: [AUSKLAPPEN] Global ZahlAusGetkey% So könntest Du später die Werte eines bestimmten Feldes abfragen: BlitzBasic: [AUSKLAPPEN] Print GetEingabeWert$(ID_BETRAG) |
||
![]() |
BB-Freak |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke ![]() Edit: Auftrag ausgeführt ![]() Update : Kommazahlen möglich; Punkte zwischen 1000er stellen ![]() ![]() ![]() Code: [AUSKLAPPEN] Global ZahlAusGetkey%
Global mb Global OneTime=2 Type Eingabefelder Field X,Y,Ausgewaehlt,Zahl,ID End Type CreateEingabeFeld(10,80,2) CreateEingabeFeld(10,120,3) CreateEingabeFeld(10,40,1) Repeat Cls mb=MouseHit(1) Eingabefeld_Zahlen() Text 150,10,GetEingabeWert(1) Flip Until KeyDown(1) Function GetEingabeWert(ID) For Eingabefeld.Eingabefelder = Each Eingabefelder If Eingabefeld\ID=ID Then Return Eingabefeld\Zahl Next End Function Function CreateEingabeFeld(X,Y,ID) Eingabefeld.Eingabefelder = New Eingabefelder Eingabefeld\X=X Eingabefeld\Y=Y Eingabefeld\ID=ID End Function Function Eingabefeld_Zahlen() ZahlAusGetkey% = GetKey() For Eingabefeld.Eingabefelder = Each Eingabefelder If mb=1 Then Eingabefeld\Ausgewaehlt=0 If RectsOverlap(MouseX(),MouseY(),1,1,Eingabefeld\X,Eingabefeld\Y,125,17) Then Eingabefeld\Ausgewaehlt=1 EndIf EndIf If ZahlAusGetkey%>47 And ZahlAusGetkey%<58 And Eingabefeld\Zahl<999999999 And Eingabefeld\Ausgewaehlt=1 Then EingegebeneZahl=ZahlAusGetkey%-48 Eingabefeld\Zahl=EingegebeneZahl+Eingabefeld\Zahl*10 EndIf If KeyHit(14) And Eingabefeld\Ausgewaehlt=1 Then Eingabefeld\Zahl=(Eingabefeld\Zahl-EingegebeneZahl)/10 EndIf If KeyHit(42) Then Eingabefeld\Zahl=0 If Eingabefeld\Ausgewaehlt=1 Then Color 0,255,0 Else Color 255,255,255 EndIf Rect Eingabefeld\X-2,Eingabefeld\Y-2,125,17,0 Text Eingabefeld\X,Eingabefeld\Y,Dezimal$(Eingabefeld\Zahl) Text Eingabefeld\X+150,Eingabefeld\Y,Eingabefeld\Zahl Next End Function Function Dezimal$(Zahl%) If Zahl>99999999 Then Return Int(Zahl/100000000)+ "." + Right(String (Zahl/100000,1),3)+ "." + Right(String (Zahl/100,1),3) + "," + Right(String (Zahl,1),2) EndIf If Zahl>99999 Then Return Int(Zahl/100000)+ "." + Right(String (Zahl/100,1),3) + "," + Right(String (Zahl,1),2) ElseIf Zahl<99999 Return Int(Zahl/100) + "," + Right(String (Zahl,1),2) EndIf End Function Midimaster hat Folgendes geschrieben: Du musst das gar nicht als zwei Variablen mitlaufen lassen. Die Rückkonvertierung erfolgt erst bei der Ausgabe:
BlitzBasic: [AUSKLAPPEN] Wert=170 oder als Funktion: BlitzBasic: [AUSKLAPPEN] Wert%=125 Ist dir da ein Fehler unterlaufen ? BB zeigt mir die Fehlermeldung : Not enought Parameters Oder muss ich da noch was änder ? Ich blicks einfach nicht warum : .FromInt ![]() So muss das heißen : BlitzBasic: [AUSKLAPPEN] Wert%=125 Oder ? ![]() ![]() ![]() ![]() ![]() ![]() |
||
- Zuletzt bearbeitet von BB-Freak am Sa, Jun 18, 2011 22:44, insgesamt 3-mal bearbeitet
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
.fromint wäre BMax, das geht so unter BB nicht. | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
BB-Freak |
![]() Antworten mit Zitat ![]() |
---|---|---|
Achso ![]() Ja mit BMax kenn ich mich nicht so gut aus ![]() Was hat das jetzt für Auswirkungen, wenn ich das so ersetze wie ich es gemacht habe ![]() PS: Jetzt weiß ich warum der Befehl nicht in der BB-Hilfe stand ![]() |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Keine, ist korrekt ersetzt. | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
BB-Freak |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das find ich gut ![]() *stolz* endlich man was richtig gemacht ![]() | aber trotzdem mal falsch geschrieben ![]() |
||
- Zuletzt bearbeitet von BB-Freak am So, Jun 19, 2011 12:46, insgesamt einmal bearbeitet
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group