Input maximale länge, brauche hilfe

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Munch

Betreff: Input maximale länge, brauche hilfe

BeitragSa, Jul 17, 2004 16:22
Antworten mit Zitat
Benutzer-Profile anzeigen
hi leute,
hab heute mal angefangen einwenig an anderen Quelltexten rum zu spielen und hab mich als erstes an die Input abfrage von iranie gemacht. Ich wollte mit max in die funktion eine Längen abfrage einbauen, aber irgendwie will es absolut nicht funktionieren. Kann mir einer zeigen und am besten erklären was ich falsch tgemacht hab? Also es soll verhindert werden, das die eingabe länger als 10 Zeichen ist.
Bye
Jan

Code: [AUSKLAPPEN]

;Global
Global mh
Global gui_selinp
Global maxz

;Grafik Optionen (Laden der bilder usw.)
Graphics 1024,768,16,1
SetBuffer BackBuffer()

;Geladene Grafiken
Global maus=LoadImage("gfx\maus.bmp")
MaskImage maus, 255, 0, 255
;--------------------------------------- Main1 --------------------------------------

;Flip usw.
Repeat
Cls
;Flip ende

;--------------------------------------- Main2 --------------------------------------

ausgabe$=gui_Input(300,300,ausgabe$="Test",1,10)

;------------------------------------ Main2 Ende ------------------------------------

;Mausoptionen
Y=MouseY()
X=MouseX()
If KeyHit(1) Then FlushKeys 
mh = 0
If MouseHit(1) Then mh = 1
DrawImage maus, X, Y
;Mausoptionen ende

;Flip usw.
Flip
Until KeyHit(1)    ;Solang Escape net gedrückt
End
;Flip ende

;------------------------------------- Main1 ende  --------------------------------

Function gui_input$(x,y,txt$,id,max)
Color 255,255,255
Rect x-1,y-1,StringWidth(txt$)+15,StringHeight(txt)+2,0
If mh
If RectsOverlap(x,y,StringWidth(txt)+16,StringHeight(txt),MouseX(),MouseY(),1,1) And gui_erra = 0
gui_selinp = id
ElseIf gui_selinp = id
gui_selinp = -1
EndIf
EndIf
If id=gui_selinp Then
If max>maxz Then
key=GetKey()
maxz=maxz+1
If key>31 Then txt$=txt$+Chr(key)
If KeyHit(82) Then txt$=txt$+"0"
If KeyHit(79) Then txt$=txt$+"1"
If KeyHit(80) Then txt$=txt$+"2"
If KeyHit(81) Then txt$=txt$+"3"
If KeyHit(75) Then txt$=txt$+"4"
If KeyHit(76) Then txt$=txt$+"5"
If KeyHit(77) Then txt$=txt$+"6"
If KeyHit(71) Then txt$=txt$+"7"
If KeyHit(72) Then txt$=txt$+"8"
If KeyHit(73) Then txt$=txt$+"9"
If KeyHit(181) Then txt$=Left(txt$,Len(txt$)-1):txt$=txt$+"/"
If KeyHit(83) Then txt$=txt$+","
EndIf
If KeyHit(14) And Len(txt$)>0 Then txt$=Left(txt$,Len(txt$)-1)
If KeyHit(14) And maxz>0 Then maxz=maxz-1
Rect x+StringWidth(txt$)+4,y+11,5,1
EndIf
Text x+3,y,txt$
Return txt$
End Function
 

zocker2150

BeitragSa, Jul 17, 2004 19:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Länge_der_Eingabe = LEN (sINPUT$)


Mit diesem Befehl bekommst du die Anzahl der Zeichen von sINPUT$. Überprüfe dann ob die Zahl > 10 ist.
 

Munch

BeitragDi, Jul 20, 2004 17:25
Antworten mit Zitat
Benutzer-Profile anzeigen
danke, hat wunderbar funktioniert.
nun gehen meine probleme weiter.
Ich würde michs ehr darüber freuen wenn mir jemand helfen könnte bei folgendem problemen:
1) Ich hab eine schleife mit einer maus, die Escape Taste soll aus dem gesamten programm springen und aus dem Input feld. Doch meist geht nur eine sache.
2) Bei drücken der Enter taste soll er ein input feld weiterspringen, ausser die Variable ruck ist net 1. Dies funktioniert auch, nur leider nur bei den ersten beiden, ins dritte springt er nicht, obwohl ich nirgends ruck=1 angegeben hab.

Ich hab irgendwie probleme mit den befehlen KeyHit() und Flushkeys, ich verstehe nicht ganz wie ich sie richtig einsetze, was sie bewirken ist klar, nur irgendwie stimmt das bei mir nie so richtig... Könnt mir dazu noch jemand ne genauere erklärung geben?

Hier nun der code:
Code: [AUSKLAPPEN]

;Global
Global gui_mh
Global gui_selinp

;Grafik Optionen
Graphics 1024,768,16,1
SetBuffer BackBuffer()

;Geladene Grafiken
Global maus=LoadImage("gfx\maus.bmp")
MaskImage maus, 255, 0, 255

;--------------------------------------- Main1 --------------------------------------

;Flip usw.
Repeat
Cls
;Flip ende

;--------------------------------------- Main2 --------------------------------------
ausgabe1$=gui_input(300,300,ausgabe1$,1,10,0)
ausgabe2$=gui_input(300,320,ausgabe2$,2,10,0)
ausgabe3$=gui_input(300,340,ausgabe3$,3,10,0)
;------------------------------------ Main2 Ende ------------------------------------

;Mausoptionen/Tastaturoptionen
FlushKeys
gui_mh = 0
If MouseHit(1) Then gui_mh = 1
DrawImage maus, MouseX(), MouseY()
;Mausoptionen ende

;Flip usw.
Flip
Until KeyHit(1)   ;Solang Escape net gedrückt
End
;Flip ende

;------------------------------------- Main1 ende  --------------------------------

;Input Funktion 1 - Beweglich
;SpeicherVariable=gui_input(PositionX,PositionY,SpeicherVariable,ID,Maximale länge,Rücksetzen)
Function gui_input$(x,y,txt$,id,max,ruck)
Color 255,255,255
Rect x-1,y-1,StringWidth(txt$)+18,StringHeight(txt)+2,0
If gui_mh
If RectsOverlap(x,y,StringWidth(txt)+16,StringHeight(txt),MouseX(),MouseY(),1,1); And gui_erra = 0
gui_selinp = id
ElseIf gui_selinp = id
gui_selinp = -1
EndIf
EndIf
If KeyHit(28) And ruck=0
gui_selinp=id+1
ElseIf KeyHit(28) And ruck=1
gui_selinp=-1
EndIf
If KeyHit(1) Then gui_selinp=-1
If id=gui_selinp Then
If Len(txt$)<max Then
key=GetKey()
If key>31 Then txt$=txt$+Chr(key)
If KeyHit(82) Then txt$=txt$+"0"
If KeyHit(79) Then txt$=txt$+"1"
If KeyHit(80) Then txt$=txt$+"2"
If KeyHit(81) Then txt$=txt$+"3"
If KeyHit(75) Then txt$=txt$+"4"
If KeyHit(76) Then txt$=txt$+"5"
If KeyHit(77) Then txt$=txt$+"6"
If KeyHit(71) Then txt$=txt$+"7"
If KeyHit(72) Then txt$=txt$+"8"
If KeyHit(73) Then txt$=txt$+"9"
If KeyHit(181) Then txt$=Left(txt$,Len(txt$)-1):txt$=txt$+"/"
If KeyHit(83) Then txt$=txt$+","
EndIf
If KeyHit(14) And Len(txt$)>0 Then txt$=Left(txt$,Len(txt$)-1)
If Len(txt$)<max Then
FlushKeys
EndIf
Rect x+StringWidth(txt$)+4,y+11,5,1
EndIf
Text x+3,y,txt$
Return txt$
End Function
[/quote][/quote]

Markus2

BeitragDi, Jul 20, 2004 23:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Von mir gibbet auch noch ne schöne Input Routine im Code Archiv 8)
 

zocker2150

Betreff: Hast du eine Tabulator-Taste an deiner Tastatur?

BeitragMi, Jul 21, 2004 2:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn ja dann bitte benutzen - sonst wird´s nix mit der schnellen Hilfe.

Code: [AUSKLAPPEN]
;Global
Global gui_mh
Global gui_selinp

;Grafik Optionen
Graphics 1024,768
SetBuffer BackBuffer()

;Geladene Grafiken
;Global maus=LoadImage("gfx\maus.bmp")
;MaskImage maus, 255, 0, 255

;--------------------------------------- Main1 --------------------------------------

;Flip usw.
Repeat

   Cls
   
   ;--------------------------------------- Main2 --------------------------------------
   ausgabe1$=gui_input(300,300,ausgabe1$,1,10,0)
   ausgabe2$=gui_input(300,320,ausgabe2$,2,10,0)
   ausgabe3$=gui_input(300,340,ausgabe3$,3,10,0)
   ;------------------------------------ Main2 Ende ------------------------------------
   
   ;Mausoptionen/Tastaturoptionen
   FlushKeys
   gui_mh = 0
   If MouseHit(1) Then gui_mh = 1
;   DrawImage maus, MouseX(), MouseY()
;   Mausoptionen ende

   Flip
   
Until KeyHit(1)
End

;------------------------------------- Main1 ende  --------------------------------

;Input Funktion 1 - Beweglich
;SpeicherVariable=gui_input(PositionX,PositionY,SpeicherVariable,ID,Maximale länge,Rücksetzen)
Function gui_input$(x,y,txt$,id,max,ruck)

   Color 255,255,255
   Rect x-1,y-1,StringWidth(txt$)+18,StringHeight(txt)+2,0
   
   If gui_mh Then
      If RectsOverlap(x,y,StringWidth(txt)+16,StringHeight(txt),MouseX(),MouseY(),1,1); And gui_erra = 0
         gui_selinp = id
;      ElseIf gui_selinp = id
;         gui_selinp = -1
      EndIf
   EndIf
   
   Text 20,20, "gui_selinp " + gui_selinp
   Text 20,40, "id " + id
      
   If KeyHit(28) Then
      gui_selinp = gui_selinp + 1            ; Hier hab ich was geändert
      If gui_selinp > 3 Then gui_selinp = 1   ; Und dort kannst ja was anderes machen wenn willst
      
;   ElseIf KeyHit(28) And ruck=1
;      gui_selinp=-1
   EndIf
   
   
;   If KeyHit(1) Then gui_selinp=-1
   If id=gui_selinp Then
      
      If Len(txt$)<max Then
      
         key=GetKey()
         
         If key>31 Then txt$=txt$+Chr(key)
         
         If KeyHit(82) Then txt$=txt$+"0"
         If KeyHit(79) Then txt$=txt$+"1"
         If KeyHit(80) Then txt$=txt$+"2"
         If KeyHit(81) Then txt$=txt$+"3"
         If KeyHit(75) Then txt$=txt$+"4"
         If KeyHit(76) Then txt$=txt$+"5"
         If KeyHit(77) Then txt$=txt$+"6"
         If KeyHit(71) Then txt$=txt$+"7"
         If KeyHit(72) Then txt$=txt$+"8"
         If KeyHit(73) Then txt$=txt$+"9"
         If KeyHit(181) Then txt$=Left(txt$,Len(txt$)-1):txt$=txt$+"/"
         If KeyHit(83) Then txt$=txt$+","
         
      EndIf
      
      If KeyHit(14) And Len(txt$)>0 Then txt$=Left(txt$,Len(txt$)-1)
      
      Rect x+StringWidth(txt$)+4,y+11,5,1
      
   EndIf
   
   Text x+3,y,txt$
   
   Return txt$
   
End Function


so das wars. Jetzt sollte wenigstens das mit dem Sprung ( 2.) ) klappen.

zu 1.) Mit dem Befehl "EXIT" kannst du aus deiner Schleife springen.
Solltest ansonsten dein Problem genauer beschreiben (Code).
 

Munch

BeitragMi, Jul 21, 2004 15:49
Antworten mit Zitat
Benutzer-Profile anzeigen
jop hab ich zufällig... Very Happy

Das problem.
Wenn der user im input feld ist, soll er mit der Escape taste aus diesem springen. Wenn er dan nochmal drückt, soll das programm beendet werden. Doch dies funktioniert nicht, er spring dan aus dem input feld aber nicht mehr aus dem programm. Wenn ich nicht ins input feld reingehe, springt er aber noch aus dem programm, also das funktioniert. Ich denke es liegt daran das ich flushkeys nicht richtig einsetze, deswegen hatte ich darum gebeten das mir Flushkeys jemand mal genauer erklärt, weil damit hab ich zimlich probleme.
 

zocker2150

BeitragMi, Jul 21, 2004 22:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah ok verstehe...

Bei deiner Hauptschleife machst du einfach
Code: [AUSKLAPPEN]
Until KeyHit(1) And gui_selinp = 0

als Abbruchkriterium.

und in der Funkion
Code: [AUSKLAPPEN]
If KeyHit(1) Then gui_selinp = 0

wieder rein.


Das mit Flushkey einfach weglassen.

http://www.blitzbase.de/befehle2d/flushkeys.htm
...mehr kan man eigendlich net über den Befehl sagen.

5k41

BeitragFr, Nov 05, 2004 15:52
Antworten mit Zitat
Benutzer-Profile anzeigen
um eine input routine zu begrenen muß man da eigentlich eine selber schreiben oder kann man auch einfach den befehl input auf ne bestimmte länge verkürzen???
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

Hubsi

BeitragFr, Nov 05, 2004 16:09
Antworten mit Zitat
Benutzer-Profile anzeigen
@5k41: Geht nur mit selbst geschriebener Funktion, es gibt aber sicher mehr als genug hier im Forum. Ist ja auch nicht wirklich schwer Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

5k41

BeitragFr, Nov 05, 2004 16:18
Antworten mit Zitat
Benutzer-Profile anzeigen
ich kann auch eine schreiben das is net das prob bin nur zu faul und dachte blitz hätte sowas praktisches glecih drin...(will mich ja blos net überarbeiten Wink )
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

regaa

BeitragFr, Nov 05, 2004 18:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Eine ganze menge an Überraschungen gibt es auch auf blitzbase.de. Da gibt es so eine Onlinehilfe, da stehen viele wundersame Befehle zur Auswahl, und wenn wir uns den input Befehl anschauen stellen wir sogar fest das der einzigste Parameter ein String ist, na also wenn das nicht dolle ist.
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

5k41

BeitragFr, Nov 05, 2004 19:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Shocked aha:idea: interessant... naja ok dann hat sich das ja wohl erledigt Wink kk danke für eure hilfe Laughing
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group