Input Total!
Übersicht

![]() |
TheMatrixBetreff: Input Total! |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sicherlich hat euch das auch schonmal genervt. Ihr wollt jemand seinen Namen in die Highscore eingeben und alles was Blitzbasic bietet is Input$(). Da findet auch noch alles über ein CMD Fenster statt und hält das ganze Programm an.
Da bietet mein kleines Prog hier abhilfe. Durch die Funktion Input2$(), kann der Spieler seinen Namen angeben. ohne das gleich das Game stockt. Diese Funktion untersüzt sämtliche Tasten wie Pos, Ende, entf, Backschift. Mit Umschalt kann ein Text mit den Pfeiltasten makiert und gelöscht werden. Das einzigste was nicht funzt, ist das man mit STRg+C nicht kopieren kann, weil ich nicht weiß wie der Befehl in BB+ lautet ![]() Hier die Funktion und ihre Parameter: input2$(start$, x,y, len) - start$ : Ein Text der sofort an Input übermittelt wird und editiert werden kann. - x : Xposition des Textes - y : Yposition des Textes - len : Die Maximale Länge des Textes. Funktionen für input2$: - setinputcolor(r,g,b) - setmarkcolor(r,g,b) setzt die Makierungsfarbe - setinputausnahme(n) n = 1 ; Es können nur Zahlen geschrieben werden n = 2 ; Es können nur Buchstaben verwendet werden - setinputzeichen(a$,b$,c$,d$, e$, f$, g$, h$, i$, j$ ) Für a$ bis j$ können beliebige Zeichen angegeben die im Input verwendet werden fürfen Wenn Zeichen im ASCII Format nacheinander stehen und die benutzt werden dürfen, dann kann zu vereinfachung auch z.B. a$="von ASCII bis ASCII" als Satz geschrieben werden. Diese Zeichen werden dann alle akzeptiert. - add$(n$) [color]Ein Einzelneszeichen für Input erlauben[/color] - ClearInput$() Resettet Input und gibt den Eingabe String aus. Der Code: [AUSKLAPPEN] Graphics 640,480,16,2 Const key_back = 14, key_return = 28 Const key_up = 200, key_down = 208, key_right = 205, key_left = 203 Const key_pos = 199, key_entf = 211, key_end = 207, key_tab = 15 Const key_umschalt = 42 Gosub Initial_Input : Dim input_ausnahme$(255) : Global input_ausnahmen setinputcolor(255,255,255) : setmarkcolor(100,100,100) ;setinputausnahme$(2) max=2 : Dim eintrag$(max) eintrag$(1)="Input1" eintrag$(2)="Input2" While Not KeyHit(1) Cls mx=MouseX() : my =MouseY() x = 50 : y=20 For a=1 To max st$ = eintrag$(a) If mx>=x And mx<x+StringWidth(st$) And my>=y And my<y+FontHeight() If MouseHit(1) Then eintrag$(wahl) = ClearInput$() : wahl = a End If If wahl=a Then st$=input2$(st$,x,y) Text x,y,st$ : y=y+20 Next If KeyHit(key_tab) eintrag$(wahl) = clearinput$() : wahl=(wahl+1) : If wahl>max Then wahl=1 End If If KeyDown(key_return) Then eintrag$(wahl) = clearinput$() : wahl=0 Flip Wend Function input2$(zu$,tx,ty, max_zeichen=255) If zu$<>"" And input_ini=0 Then input_ini=1 : input_text$=zu$ : input_cursor=Len(zu$) : mark=1 : start_mark=0 : end_mark=Len(zu$) st$ = input_text$ : cur = input_cursor If mark=1 dif=cur-start_mark end_mark=start_mark+dif If start_mark<end_mark Then start = start_mark : ende = end_mark Else start=end_mark : ende = start_mark If dif<0 Then dif=dif*-1 If start>0 x2 = StringWidth(Left$(st$,start)) x3 = StringWidth(Mid$(st$,start,dif)) Else x2 = 0 x3 = StringWidth(Mid$(st$,1,dif)) End If Color mark_color_r,mark_color_g,mark_color_b If dif<>0 Then Rect tx+x2,ty,x3,FontHeight() End If k = GetKey() : a$ = Chr$(k) : s = Len(st$) ok=1 For i=1 To input_ausnahmen ok=0 : aa$ = input_ausnahme$(i) If Asc(aa$)=k Then ok=1 : Exit Next If k>=32 And k<255 And ok=1 If mark=1 And dif<>0 Then st$=Left$(st$,start)+Right$(st$,Len(st$)-ende) : cur=start : mark=0 If mark=1 And dif=0 Then mark=0 If Len(st$)<max_zeichen If s>0 Then st$=Left$(st$,cur)+a$+Right$(st$,Len(st$)-cur) Else st$=a End If cur = cur+1 key=1 End If If MilliSecs()>=key_timer_input key_timer_input=MilliSecs()+80 If KeyDown(key_back) If ((mark=1 And dif=0) Or mark=0) And cur>0 Then st$ = Left$(st$,cur-1)+Right$(st$,Len(st$)-cur) : cur = cur-1 : mark=0 If mark=1 And dif<>0 Then st$ = Left$(st$,start)+Right$(st$,Len(st$)-ende) : cur = start : mark=0 End If If cur>0 If KeyDown(key_left) Then cur=cur-1 : key=1 End If If KeyDown(key_entf) If ((mark=1 And dif=0) Or mark=0) And s>0 And cur<s And mark=0 Then st$ = Left$(st$,cur)+Right$(st$,(Len(st$)-cur)-1) : mark=0 : key=1 If mark=1 And dif<>0 Then mark=0 : st$=Left$(st$,start)+Right$(st$,Len(st$)-ende) : cur = start End If If cur<Len(st$) Then If KeyDown(key_right) Then cur=cur+1 : key=1 If KeyDown(key_pos) Then cur=0 : key=1 If KeyDown(key_end) Then cur=Len(st$) : key=1 If KeyDown(key_umschalt) If mark=0 Then mark=1 : start_mark=cur umschalt=1 Else If key=1 Then mark=0 : key=0 End If : key=0 If mark=0 Then start=0 : ende=0 : dif=0 End If lx = StringWidth(Left$(st$,cur)) If MilliSecs()>=cursor_timer cursor_timer = MilliSecs()+250 If cursor=1 Then cursor=0 Else cursor=1 End If Color input_color_r, input_color_g, input_color_b If cursor=1 Then Line tx+lx,ty,tx+lx,ty+FontHeight() input_text$=st$ : input_cursor=cur Text tx,ty,st$ Return st$ End Function Function setmarkcolor(r,g,b) mark_color_r=r : mark_color_g=g : mark_color_b=b End Function Function setinputcolor(r,g,b) input_color_r=r : input_color_g=g : input_color_b=g End Function Function ClearInput$() st$ = input_text$ : mark=0 : input_cursor=0 : input_ini=0 input_text$="" Return st$ End Function Function setinputausnahme$(option) Select option ; nur Zahlen Case 1 addinputzeichen("von 48 bis 57") ; Nur Buchstaben Case 2 addinputzeichen("von 65 bis 90","von 97 bis 122","ä","Ä","ö","Ö","ü","Ü") add$("ß") : add$(" ") End Select End Function .Initial_Input Global key_timer_input, start_mark, end_mark, mark, cursor_timer, cursor, input_text$, input_cursor Global input_color_r, input_color_g, input_color_b, mark_color_r,mark_color_g,mark_color_b, input_ini Return Function addinputzeichen$(a$="",b$="",c$="",d$="",e$="",f$="",g$="",h$="",i$="",j$="") For var=1 To 10 Select var Case 1 : st$ = a$ Case 2 : st$ = b$ Case 3 : st$ = c$ Case 4 : st$ = d$ Case 5 : st$ = e$ Case 6 : st$ = f$ Case 7 : st$ = g$ Case 8 : st$ = h$ Case 9 : st$ = i$ Case 10 : st$ = j$ End Select If st$<>"" If Left$(st$,3)="von" For ascii = Mid(st$,5,3) To Right(st$,3) add$(Chr$(ascii)) Next : Goto befehlistok End If add$(st$) Else Exit End If .befehlistok Next End Function Function add$(a$) i = input_ausnahmen+1 input_ausnahmen = i input_ausnahme$(i)=a$ End Function |
||
- Zuletzt bearbeitet von TheMatrix am Mi, Okt 11, 2006 9:02, insgesamt 4-mal bearbeitet
![]() |
Triton |
![]() Antworten mit Zitat ![]() |
---|---|---|
Öfter mal was neues, hm? | ||
Coding: silizium-net.de | Portfolio: Triton.ch.vu |
![]() |
PowerProgrammer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schonwieder soeine Funktion...
Deine Funktion ist ja ganz nett, allerdings lässt sich nur 1 "input-Feld" erstellen... also noch ausbaufähig. Es ist außerdem praktischer, wenn man den Standard-Farbbefehl von Blitz nutzen könnte, nicht dieser Umweg über die Spezialfunktion... |
||
www.xairro.com Alles für Webmaster und Programmierer! Es gibt mehr als bloß einen Counter! |
![]() |
TheMatrix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Tja, ich bin nur daran bedacht meinen Community-Mitgliedern so gut es geht zu helfen ![]() |
||
°_° °.° °~° °v° .. -.- |
![]() |
PowerProgrammer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: meinen Community-Mitgliedern
hört sich egoistisch an ![]() Aber es gibt wirklich schon genug Input-routinen. Wenn man wirklich eine benötigt, für ein Projekt, dann programmiert man sich die aber einfach mal kurz selber, da die dann optimierter ist. Solche Funktionen im Codearchiv sind dazu gut, den Anfängern Beispiele zu liefern. Zu viele müssens aber net sein, dann wird das Archiv noch unübersichtlicher ![]() Naja, Kritik musste sein. |
||
www.xairro.com Alles für Webmaster und Programmierer! Es gibt mehr als bloß einen Counter! |
![]() |
TheMatrix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wieso, nur einmal benutzen? Du kannst input2$() sooft benutzen wie du willst. Mit ClearInput$() wird Input zurückgesezt und kann dann somit wiederverwendet werden ![]() EDIT: Was meinst du mit optimiert? In dieser Funktion ist eigentlich alles was man braucht ![]() |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es geht um mehrere gleichzeitig benutzbare Inputfenster.
Und optimiert bezog sich auch sicher nicht auf die vorhandenen Features, sondern darauf dass man seine Inputroutine an das gewünschte Programm anpasst um sie möglichst effizient zu halten. Deine Routine ist nicht schlecht, aber sie ist eben eine unter vielen ![]() |
||
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 |
![]() |
TheMatrix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das musst du mir jetzt aber mal genauer erklären. Man kann sich doch eh nur auf ein Input zurzeit konzentrieren. Wie willst du bitte in 2 Fenster gleichzeitig schreiben?Du schreibst doch wenn erst in Fenster 1 dein Input, dann in Fenster 2. Das ist auf jeden Fall machbar, selbst mit 1000 Fenstern ![]() Wenn du Optimierungsvorschläge hast, damit man sie an ein Spiel anpassen kann, dann nenne sie mir bitte. Du kannst Schriftgröße, -farbe und -art festlegen. Was will man da bitte noch? Du kannst, wenn du lustig bist auch ein rect rumzeichen. Da hält dich keiner von ab ![]() |
||
°_° °.° °~° °v° .. -.- |
![]() |
PowerProgrammer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mehrere Inputfenster, wovon natürlich immer nur eins einen Fokus haben kann. Z.B. ein Formular, wo man doch manchmal erst das eine als das andere ausfüllt. Da kann man schon sehen, was man überhaupt alles ausfüllen muss...
Das mit den Opptimierungsvorschlägen meine ich etwas anders. Für fast jedes Spiel eignen sich verschiedene Typen von Inputtypen. In manchen benötigt man nur eins, in anderen aber 20. Dann soll in dem einen nur ein bestimmter Zeichensatz erlaubt sein und das andere wiederrum soll als Passwortfeld fungieren. Deshlab ist selberschreiben praktischer... Und würdest du für ein Spiel alle möglichen fertigen Codes zusammenkopieren? |
||
www.xairro.com Alles für Webmaster und Programmierer! Es gibt mehr als bloß einen Counter! |
![]() |
TheMatrix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das mit den Formular liegt nicht an meiner Funktion sonder an dir sie anzuwenden. Ich hab dem Obigen Code extra ein paar Zeilen für dich hinzugefügt. Der behandelt 20 Einträge gleichzeitig, es können meinetwegen auch 100 oder 1000 sein, wie du willst. Die Funktion ist unverändert.
Wenn es Zeichen gibt, die nicht verwendet werden dürfen, Bau ich das natürlich mit ein. Aber Frage: Ist es nicht besser 1 Input Funktion zu nutzen, die alles vereint als mit 20 sein Quellcode voll zu müllen? ![]() ~EDIT~ Zum anvesieren der "Formulareinträge" mit der Maus draufklicken ![]() |
||
![]() |
TheMatrix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jetzt können auch InputAusnahmen betrachtet werden. Jeder Buchstabe kann erlaubt oder auch verboten sein.
Vielleicht kann sich ja jetzt die Funktion gegen andere behaupten ![]() |
||
°_° °.° °~° °v° .. -.- |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group