Texteingabe aktivieren?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

US-Blitz

ehemals "SimssmiS"

Betreff: Texteingabe aktivieren?

BeitragSo, Dez 18, 2011 23:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
;Texteingabe während laufendem Programm

Global tex_curspos        ;vom ende des Textes ausgehend


Function Texin(x,y,textvar$)  ;textvar sollte sinngemäß der zuweisungsvariable gleichen.
   
   links$=Left(textvar,Len(textvar)-tex_curspos)
   rechts$=Right(textvar,tex_curspos*-1)
   
   eingabe=GetKey()
   If eingabe=30                     ;keyright
      If tex_curspos<>0
         tex_curspos=tex_curspos+1
      EndIf
   ElseIf eingabe=31                  ;keyleft
      If tex_curspos*-1<>Len(textvar)
         tex_curspos=tex_curspos-1
      EndIf
   ElseIf eingabe=8                  ;backspace
      If links<>0
         links=Left(links,(Len(links)-1))
      EndIf
   ElseIf eingabe=4                  ;delete
      If rechts<>0
         rechts=Right(rechts,(Len(rechts)-1))
      EndIf
   ElseIf eingabe=1                  ;pos1
      tex_curspos=Len(textvar)*-1
   ElseIf eingabe=2                  ;end
      tex_curspos=0
   ElseIf eingabe<=31                  ;keine text keys
      Return textvar$
   EndIf
   
   Return (links+Chr(eingabe)+rechts)      ;Ausgabe wenn text eingegeben
   
End Function


So sieht meine Texteingabe momentan aus.
Meine Frage ist wie kann ich sie allgemein aktivieren und auch am laufen halten? Hab da so noch keine Idee!


ps: Verbesserungsideen auch gern gesehen.
  • Zuletzt bearbeitet von US-Blitz am Mo, Dez 19, 2011 21:12, insgesamt einmal bearbeitet

Xeres

Moderator

BeitragMo, Dez 19, 2011 0:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Du könntest dir mal den BPS #9: Input-Funktion ansehen.
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

ozzi789

BeitragMo, Dez 19, 2011 10:54
Antworten mit Zitat
Benutzer-Profile anzeigen
"Operator cannot be applied to strings"

Wenn du ein lauffähiges Beispiel bringst, würd ich mir das anschauen Smile

Grüsse
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Midimaster

BeitragMo, Dez 19, 2011 13:53
Antworten mit Zitat
Benutzer-Profile anzeigen
nutze dazu den Millisecs() Timer. In meinem Timer-Turorial gibt es ein Beispiel, dass dir nützlich sein könnte:

Textbox für mehrere Sekunden:

https://www.blitzforum.de/foru...548#364548
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

US-Blitz

ehemals "SimssmiS"

BeitragMo, Dez 19, 2011 21:16
Antworten mit Zitat
Benutzer-Profile anzeigen
So code ist jetzt korrigiert tut mir leid.
Mind das tutorial ist zwar hilfreich war mir jedoch bereits bekannt und ist meiner Meinung nach für dieses Problem nicht wirklich sinnvoll da eine Texteingabe selten zeit begrenzt ist, sondern eher aktiviert und abgeschlossen werden kann.

ozzi789

BeitragDi, Dez 20, 2011 10:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Hatte gerade Lust selber was zu proggen,
Die Eingabefelder werden per Tabulator gewechselt

Resultat:

BlitzBasic: [AUSKLAPPEN]
; -----------------------
; TEXTFIELDS
; BY OZZI789 - 20.12.2012
; -----------------------



;GFX INITIALIZATION
Graphics 640,480
SetBuffer BackBuffer()
timer = CreateTimer (60)

;GET RANDOM NUMBERS
SeedRnd MilliSecs()
;WE NEED THIS FLAG LATER
Global set_next_active=0

;THE TYPE WE STORE OUR TEXTFIELDS
Type textfield
Field id
Field x
Field y
Field active
Field content$
End Type


;CREATE 3 TEXTFIELDS
i.textfield= New textfield
i\id=1
i\x=400
i\y=360
i\active=1

i.textfield= New textfield
i\id=2
i\x=500
i\y=420
i\active=0


i.textfield= New textfield
i\id=3
i\x=380
i\y=0
i\active=0



;MAINLOOOP
While Not KeyHit(1)
Cls
;RENDER TEXTFIELDS
render_textfield()
;GET INPUT FOR TEXTFIELDS VIA GETKEY()
get_input()
;RENDER RANDOM STUFF TO SHOW "MULTITASKING"
Color Rnd(0,255),Rnd(0,255),Rnd(0,255)
Rect Rnd(0,320),Rand(0,320),20,20,Rnd(0,1)
Color 255,255,255
Rect 0,0,340,340,0
;WAITTIMER AND RENDER SCREEN
WaitTimer timer
Flip 0
Wend


;HERE WE GET THE KEYBOARD INPUT
Function get_input()
For i.textfield = Each textfield
;IF THE FLAG WAS SET, SET NEXT INSTANCE IN TYPE COLLECTION ACTIVE
If set_next_active=1
;RESET THE FLAG
set_next_active=0
i\active=1
EndIf
;IF WE GOT THE ACTIVE FIELD
If i\active=1
;GET INPUT
temp_key=GetKey()
;IF THERE WAS A INPUT
If temp_key<>0
Select temp_key
Case 8 ;BACKSPACE -> DELETE LAST CHAR
i\content$=Left(i\content$,Len(i\content$)-1)
Case 9 ;TAB CHANGE TO NEXT TEXTFIELD
i\active=0
set_next_active=1
Case 13 ;ENTER WAS PRESSED -> DO WHAT YOU WANT WITH IT
DebugLog "Enter pressed in textfield with id# "+i\id
Default ;NONE OF THE ABOVE CASES -> ADD PRESSED KEY
i\content$=i\content$+Chr(temp_key)
End Select
EndIf
EndIf
Next
End Function


Function render_textfield()
For i.textfield = Each textfield
If i\active=1 ;RENDER THE ACTIVE ONES
Color 255,255,255
Rect i\x,i\y,200,20,0
Text i\x+2,i\y,i\content$
Else ;RENDER THE INACTIVE ONES
Color 255,0,0
Rect i\x,i\y,200,20,0
Text i\x+2,i\y,i\content$
EndIf
Next
End Function


Hoffe es hilft dir weiter,
Grüsse
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group