Beste Inputroutine

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Valnar

Betreff: Beste Inputroutine

BeitragSo, Aug 10, 2008 6:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

ich hab mal die Forensuche nach inputroutinen abgesucht und dort eine ganze stange von Routinen gefunden.

Da ich keine Lust hab jede einzelne zu Testen (Was schon seine Zeit dauern würde), wollte ich mal erfragen was an sich die beste Inputroutine ist.

Also was es können sollte:
* Alle Keys abfragen
* Mit Pfeiltasten und Maus eine bestimmte stelle anklicken
* POS1 sollte ganz nach vorne gehen
* ENDE sollte ganz nach hinten gehen
* Bei Gedrückter Taste nach kurzer Zeit mehrfach "wahrnehmen"

Optional währe noch schön:
* mehrere Inputfelder
* Eingabe optional auf bestimmte sachen beschränken (Sprich nur Zahlen/Buchstaben und eventuell mehr)
* Mehrzeiliger Text


Habt ihr sowas auf Lager?
Welche Routine benutzt ihr standartmäßig?#
Welche ist zu empfehlen?

Grüße und danke im Vorraus
Valnar

Blackside

BeitragSo, Aug 10, 2008 11:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube auch nicht das andere Forenmember Lust haben, alle Inputs
durchzugehen, und viele werden sich die Inputs auch selbst programmieren.
Ich würde an deiner Stelle auch erstmal probieren selbst ein zu programmieren,
denn so hast du auch alle deine Feutures, es wird schwer eine zu finden sein
die genau das alles hat wie du geschrieben hast...
Ist übrigens auch eine schöne Übung zu Types und Textverarbeitung Wink
Hier sollte eigentlich eine Signatur stehen!

Smily

BeitragSo, Aug 10, 2008 11:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Selbstgemacht ist immer am besten.
Programmier dir einfach eine Input-Routine, die alles kann, was du brauchst Wink

Oder überfliege dir die Codes der Inputroutinen, da müsste man ja etwa rauslesen können, was die alles machen.
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

Valnar

BeitragSo, Aug 10, 2008 14:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Ich glaube auch nicht das andere Forenmember Lust haben, alle Inputs
durchzugehen, und viele werden sich die Inputs auch selbst programmieren.
Ich würde an deiner Stelle auch erstmal probieren selbst ein zu programmieren,
denn so hast du auch alle deine Feutures, es wird schwer eine zu finden sein
die genau das alles hat wie du geschrieben hast...
Ist übrigens auch eine schöne Übung zu Types und Textverarbeitung Wink

Ja das ist richitg, aber es gibt sicherlich einige Leute die Ihre Inputroutine als beste ansehen.
Selber schrieben hab ich schon versucht, so ganz hab ich das nicht gecheckt^^
Ausserdem denke ich das man das Rad ja nicht immer neu erfinden muss Very Happy

Blackside

BeitragSo, Aug 10, 2008 15:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn man sich ein Editfield selbst programmiert, erfindet man es nicht neu,
hier sind ein paar Befehle die dir helfen könnten Wink:
GetKey -> liefert den Ascii Code und nicht den Scancode zurück, d.h. einfach chr(getkey()) = gedrückter Buchstabe.
Type -> Falls du noch nicht vertraut mit Types bist, schau dir am besten ein paar tuts an

Hier ein kleines Beispiel(ohne blinkenden Cursor etc...) einfach ins kästchen klicken und tippen Wink
erweitern kannst du es ja selber mit all deinen Features...
Code: [AUSKLAPPEN]
Graphics 800,600,32,2
SetBuffer BackBuffer()

Global ef.editfield
CreateEdit(100,100,100)
While Not KeyDown(1)
   
   
   For ef.editfield = Each editfield
      Rect ef\x,ef\y,ef\width,25,0
      Text ef\x,ef\y+6,ef\txt$
      If MouseX() >= ef\x And MouseX() <= ef\x+ef\width And MouseY() >= ef\y And MouseY() <= ef\y+25 Then
         If MouseDown(1) Then ef\active = 1:FlushKeys()
      Else
         If MouseDown(1) Then ef\active = 0
      End If
      
      If ef\active = 1 Then
         Local gh = GetKey()
         If gh >= 32 Then
            ef\txt$ = ef\txt$+Chr(gh)
         End If
         
         If KeyHit(14) Then ef\txt$ = Mid(ef\txt,1,Len(ef\txt$)-1)
      End If
      
   Next
   
   Flip
   Cls
Wend


Function CreateEdit(x,y,width)
   ef.editfield = New editfield
   ef\x = x
   ef\y = y
   ef\width = width
End Function

Type editfield
   Field x,y,width,txt$
   Field active
End Type
Hier sollte eigentlich eine Signatur stehen!
 

BadDeath

BeitragSo, Aug 10, 2008 16:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier mal ein Beispiel von mir - komplett selbst gemacht.

Man kann mit dem Attribut "Mode" einstellen, bei welchem "Fenster" die Textbox gemalt werden soll wie z.B. so:

Schritt 1: Anmeldung (man gibt PW und Name ein), dann klickt man auf einen Button, der die Globale "Mode" ändert, so ist Schritt 2 aktuell: z.B. eMail schreiben (Textboxen für Empfänger, Betreff und so werden nun statt denen für den Login gezeichnet).

Dann kann man welche auf die Eingabe von IPs und Ziffern beschränken, den Nummernblock benutzen, Backspace drücken und gedrückt lassen und durch den Tabulator zu den anderen wechseln. Zudem gibt es noch einen blinkenden Cursor Laughing

Ist zwar nicht die schnellste, aber Draw3D baue ich bald ein Wink

Code: [AUSKLAPPEN]
Global MX, MY, Downtime, Mouse, Key, Cursor, Zeit#, Mode = StartScreen, T2.Textbox
Timer = CreateTimer(60)

Const StartScreen = 1

Type Textbox
   Field X, Y
   Field W, H
   Field Txt$
   Field Enabled%
   Field Focus%
   Field Mode
   Field NurNummern%
   Field Font
   Field NurIP%
End Type


Global TxtVorname.Textbox = New Textbox
   TxtVorname\X = 160
   TxtVorname\Y = 140
   TxtVorname\W = 150
   TxtVorname\H = 20
   TxtVorname\Enabled% = 1
   TxtVorname\Font = LoadFont("Arial", 20, 1)
   TxtVorname\Mode = StartScreen
      
Global TxtName.Textbox = New Textbox
   TxtName\X = 160
   TxtName\Y = 100
   TxtName\W = 150
   TxtName\H = 20
   TxtName\Txt$ = "Beispiel"
   TxtName\Enabled% = 1
   TxtName\Font = LoadFont("Arial", 20, 1)
   TxtName\Mode = StartScreen
   TxtName\Focus = 1

Global TxtAlter.Textbox = New Textbox
   TxtAlter\X = 160
   TxtAlter\Y = 180
   TxtAlter\W = 150
   TxtAlter\H = 20
   TxtAlter\Enabled% = 1
   TxtAlter\Font = LoadFont("Arial", 20, 1)
   TxtAlter\Mode = StartScreen
   TxtAlter\NurNummern = 1 ;NUR ZIFFERN

Global TxtNix.Textbox = New Textbox
   TxtNix\X = 160
   TxtNix\Y = 230
   TxtNix\W = 150
   TxtNix\H = 20
   TxtNix\Enabled% = 0 ;DEAKTIVERT
   TxtNix\Font = LoadFont("Arial", 20, 1)
   TxtNix\Mode = StartScreen


While Not KeyHit(1)
   Cls
   ClsColor 69,139,116
   
   MX    = MouseX()
   MY    = MouseY()
   Mouse = MouseHit(1)
   Key   = KeyHit(1)
   Zeit# = MilliSecs()
   
   Textboxen()
   
   If Mode = StartScreen Then
      Color 60,60,60
         Text 80,100,"Name:"
         Text 80,140,"Vorname:"
         Text 80,180,"Alter:"
         Text 80,230,"Nix:"
      ;Fortsetzung zb so:
      ;If Button "Weiter" gedrückt, Mode = AuswahlScreen
   End If
   
   ;If Mode = .....
   
   ;Beispiel für das Auslesen der Textfelder
   AppTitle "Hallo " + TxtVorname\Txt + " " + TxtName\Txt + "!"

   WaitTimer Timer
   Flip 0
Wend
End






Function UnFocusTextBoxen()
   For t.Textbox = Each Textbox
      T\Focus% = 0
   Next
End Function

Function Textboxen()
   If downtime < 6 Then
      downtime = downtime + 1
   Else
      downtime = 1
   End If
   
   For T.Textbox = Each Textbox
      If T\Mode = Mode Then
         Color 0,0,0
         Rect T\X-2, T\Y-2, T\W, T\H, 1
         
         If T\Enabled Then   
            Over = RectsOverlap(T\X, T\Y, T\W, T\H, MX, MY, 1,1)
            If Over = 1 Then Color 255,255,255
            If Over = 0 Then Color 200,200,200
            If T\Focus% = 1 Then Color 190,255,190
                  
            Rect T\X, T\Y, T\W, T\H, 1
            
            If Over And MouseDown(1) Then
               UnFocusTextBoxen()
               T\Focus% = 1
            End If
            
            Color 0,0,0
            SetFont T\Font
            Text T\X+2,T\Y, T\Txt ;Textfeld beschriften
            
            If T\Focus% Then
               Local Key = GetKey()
               
               If Key = 13 Then UnFocusTextBoxen() ;Focus bei Enter entfernen
               
               If Zeit - Cursor > 500 Then ;blinkender Cursor
                  If Zeit - Cursor > 1000 Then Cursor = Zeit
                  Text StringWidth(T\Txt)+T\X, T\Y-2, "|"
               End If
               
               If T\NurIP = 0 Then
                  If T\NurNummern = 0 Then
                     If Key > 31 And StringWidth(T\Txt)+10 < T\W Then T\Txt = T\Txt + Chr$(Key) ;alle Zeichen
                  Else
                     If Key > 47 And Key < 58 And StringWidth(T\Txt)+10 < T\W Then T\Txt = T\Txt + Chr$(Key) ;nur Zahlen
                  End If
               Else
                  If Key > 45 And Key < 58 And StringWidth(T\Txt)+10 < T\W And Key <> 44 Then T\Txt = T\Txt + Chr$(Key) ;nur IP-Adressen
               End If
               
               ;Nummernblock
               If T\NurIP = 0 And T\NurNummern = 0 Then
                  If KeyHit(83) And StringWidth(T\Txt)+10 < T\W Then T\Txt = T\Txt + ","
                  If KeyHit(74) And StringWidth(T\Txt)+10 < T\W Then T\Txt = T\Txt + "-"
                  If KeyHit(78) And StringWidth(T\Txt)+10 < T\W Then T\Txt = T\Txt + "+"
               End If
                     
               If KeyHit(71) And StringWidth(T\Txt)+10 < T\W Then T\Txt = T\Txt + "7"
               If KeyHit(72) And StringWidth(T\Txt)+10 < T\W Then T\Txt = T\Txt + "8"
               If KeyHit(73) And StringWidth(T\Txt)+10 < T\W Then T\Txt = T\Txt + "9"
               If KeyHit(75) And StringWidth(T\Txt)+10 < T\W Then T\Txt = T\Txt + "4"
               If KeyHit(76) And StringWidth(T\Txt)+10 < T\W Then T\Txt = T\Txt + "5"
               If KeyHit(77) And StringWidth(T\Txt)+10 < T\W Then T\Txt = T\Txt + "6"
               If KeyHit(79) And StringWidth(T\Txt)+10 < T\W Then T\Txt = T\Txt + "1"
               If KeyHit(80) And StringWidth(T\Txt)+10 < T\W Then T\Txt = T\Txt + "2"
               If KeyHit(81) And StringWidth(T\Txt)+10 < T\W Then T\Txt = T\Txt + "3"
               If KeyHit(82) And StringWidth(T\Txt)+10 < T\W Then T\Txt = T\Txt + "0"
               
               If KeyDown(14) And DownTime = 6 And T\Txt <> "" Then T\Txt = Left$(T\Txt, Len(T\Txt)-1) ;Backspace
               
               If Key = 9 Then ;Tabben
                  If T = Last Textbox Then
                     T2.Textbox = First Textbox
                  Else
                     T2.Textbox = After T.Textbox
                  End If
                  
                  If T\Mode = T2\Mode Then
                     UnFocusTextBoxen()
                     T2\Focus% = 1
                  End If
               End If
            End If
         Else
            Color 150,150,150
               Rect T\X, T\Y, T\W, T\H, 1
         End If
      End If
   Next
End Function


PS: Bei deaktivierten Objekten, funktioniert das Tabben noch nicht so recht....
-~= real coders just code in binary =~-
  • Zuletzt bearbeitet von BadDeath am Di, Aug 12, 2008 9:20, insgesamt einmal bearbeitet

Valnar

BeitragDi, Aug 12, 2008 3:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmmm die untere gefällt mir Very Happy

Aner ich kapier das immernoch nicht.
Was muss in die Funktion, was ist genau 1 Inputfeld und was muss ich verändern und was stehen bleiben (Bei den Types)? Und was heissen die Variablen
 

BadDeath

BeitragDi, Aug 12, 2008 9:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Eigentlich recht einfach: Man erstellt eine Neue, indem man ein neuen Type ertstellt:

Code: [AUSKLAPPEN]

Global TxtName.Textbox = New Textbox    ;neue Textbox erstellen
   TxtName\X = 160       ; X-Position
   TxtName\Y = 100       ; Y-Position
   TxtName\W = 150      ; Breite
   TxtName\H = 20         ; Höhe
   TxtName\Txt$ = "Beispiel"  ; Optional: vordefinierter Text, der drin steht
   TxtName\Enabled% = 1      ; Deaktiveren und Aktivieren der Textbox
   TxtName\Font = LoadFont("Arial", 20, 1)  ; Schriftart
   TxtName\Mode = StartScreen      ;der Screen-Index, siehe letzten Beitrag von mir
   TxtName\Focus = 1     ; Focus der Textbox, also ob sie ausgewählt ist, man Eingaben machen kann und der Cursor blinkt - pro Mode kann nur eine aktiv sein - logisch, oder?

   TxtName\NurNummern% ; Nur Ziffern von 0-9 erlaubt
   TxtName\NurIP% ; Ziffern 0-9 und Punkte erlaubt


Und um den Text auszulesen: Eingabe$ = TxtName\Txt$
-~= real coders just code in binary =~-

EPS

BeitragDi, Aug 12, 2008 13:28
Antworten mit Zitat
Benutzer-Profile anzeigen
http://www.east-power-soft.de/...s_inputbox
mGUI - Graphical User Interface für Blitz3D...Informationen gibt es hier

Man kann sich öfter als zweimal im Leben halb tot lachen.

Valnar

BeitragDi, Aug 12, 2008 15:22
Antworten mit Zitat
Benutzer-Profile anzeigen
@EPS ja deine seite hab ich die Nacht entdeckt, ich werd mir im verlaufe des Tages das durchnehmen....
Sind auch sehr interessante, andere Sachen drauf.

Ich werde mir mal die 3 genauer zugute führen, evtl können ja andere auch ihre erfahrung posten und dann krönen wir einen KING OF INPUTROUTINE *gg*

Blackside

BeitragDi, Aug 12, 2008 15:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Meine Input-Routuine hab ich in 5 min. gecoded, also kannst du meine gleich
von der "Wahl" ausschließen, ich wollte dir nur Tipps geben, denn was bringt
dir ein vorgefertigter Code, wenn du ihn nicht verstehst?
Deswegen ist es wahrscheinlich immer am besten, selbst etwas zu schreiben,
also würde ich dir raten, dich durch Tutorials über Types zu arbeiten und probieren,
selbst einen zu schreiben(zur hilfe kannst du ja auch meinen oder die anderen Codes verwenden
Wink)
MFG Blackside
Hier sollte eigentlich eine Signatur stehen!

Valnar

BeitragDi, Aug 12, 2008 16:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Mommentan versteh ich ihn noch nicht, aber was nicht ist kann noch werden.

Und ich bin der meinung "lieber einen guter Fremder Script als ein schlechter eigener"

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group