Input funktion? oder selbst schreiben?

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

Ticha

Betreff: Input funktion? oder selbst schreiben?

BeitragSo, Feb 04, 2007 0:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi

ich arbeite zur Zeit an an einem GUI, das mit Buttons, Rahmen und Menüs denke ich mal bekomme ich hin. (teste erstmal alles durch bis ich dann richtig anfange es zu schreiben) Doch irgendwie benötige ich auch eine Eingabe druch Eingabefelder. Z.B. um den Namen einer Spielfigur zu ändern oder aber sich in die Highscore einzutragen. Wie dem auch sei. Gibt es dafür eine spezielle input funtion wie damals bei Basic oder muss man da sich selbst etwas zusammenbasteln?

Wenn ja wie heisst die? und wie benutzt man sie?

Wenn nein, habe ich mir da einmal etwas überlegt...
Sobald der Bereich im GUI mit einer Texteingabe angeklickt wurde, liest man alle Tasten von der Tastatur und speichert die Einträge in einer Liste, jedesmal wenn ein Buchstabe gedrückt wurde, gibt er automatisch den Buchstaben in dem eingabefeld aus. Danach kann man ja mit der Liste machen was man will, so zum Beispiel diese Daten in einer DAtei speichern oder irgendwo hinschicken.
Meine Frage, falls es nicht eine einfache Input funtion gibt:
Ist dies eine Sinnvolle Idee, oder einfach nur schrott? Kann mir jdm ideen geben wie ich das verbessern kann oder wie es richtig geht?

Ich hoffe ihr könnt mir helfen

mfg Ticha
 

Dreamora

BeitragSo, Feb 04, 2007 1:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Input Funktion: Gibt es, bringt aber nichts, die hat nämlich die gleiche Einschränkung wie die alte: Geht nur in der Konsole.

Aber du kannst die genau gleiche Variante wie damals verwenden, nämlich via GetChar das zuletzt eingegebene Zeichen abfragen Smile (alternativ kannst du dir auch den Aufwand eines weiteren GUI Systems sparen und HighGUI ansehen und gegebenenfalls erweitern, davon würde die allgemeinheit wohl mehr profitieren denn das dortige Textarea würde sich über ein wenig verbesserung freuen Smile )
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Ticha

BeitragSo, Feb 04, 2007 1:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Also wenn schon dann möchte ich das GUI doch schon selbst schreiben. Will doch so langsam mal lernen wie so was funktioniert und wie man es schreibt.

Es gibt ja Leute die kaufen sich ein Auto und fahren es, wenn es kaputt geht fahren sie in die Werkstatt und reparieren es. Ich baue mir mein Auto und wenn e kaputt geht weiss ich woran es liegt. Es ist zwar nicht so schön und schnell wie das andere, aber dafür hab ich etwas davon. Smile (das mit dem Auto nur im übertragenen Sinn verwenden Wink )

Aber war ich da mit meiner Denkweise richtig? GetChar Methode annehmen und dann in ne Liste rein? oder geht es auch anders und effektiver?
 

Dreamora

BeitragSo, Feb 04, 2007 1:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein nicht wirklich. GetChar und in eine Liste ist der sinnvollste Ansatz ausser du kennst die maximale Anzahl Buchstaben schon, dann wäre eine Byte Array vermutlich noch besser, wo du dann Asc(getChar()) reinspeicherst.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Ticha

BeitragSo, Feb 04, 2007 1:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein ByteArray? Das besteht doch nur aus True und False ähnlich Boolean oder?

Blitzcoder

Newsposter

BeitragSo, Feb 04, 2007 1:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, aus Zahlen. Dreamora meint, dass du, wenn du ein Textfeld mit z.B. 10 Zeichen hast, du einfach ein 10er Array nimmst und dort die ASCII Werte der Buchstaben speicherst. Array sind aber nicht vergrösser oder verkleinerbar, daher eignenen sie sich nur für statische Grössen.
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________
|°°°°°°°°°°°°°°||'""|""\__,_
|______________ ||__ |__|__ |)
|(@) |(@)"""**|(@)(@)****|(@)
 

Ticha

BeitragSo, Feb 04, 2007 1:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm... stimmt das waere bloed, da es sich dabei um ein Passwort und ein Nickname abfrage handelt. Aber man muesste sie halt eben nur begrenzen. Nick mit Max 10 Zeichen oder so, was wiederrum einen Overfloat der Zeile verhindern würde. Ich denke ich werde es mit dem array versuchen. ich denke das wird schoin funktionieren. Wenn nicht hak ich nach.

Danke für die schnelle antwort Smile

Schnittlauch

Unkraut

BeitragSo, Feb 04, 2007 1:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Also für einzeiler mit statischer größer hat mir immer ein String gereicht.
Ich wars nicht.
 

Ticha

BeitragSo, Feb 04, 2007 1:38
Antworten mit Zitat
Benutzer-Profile anzeigen
und wie ?
wie kann ich dann die Daten die ich mit Getchar() einlese dann in einem string spreichern? Das wäre mir von der weiteren verarbeitung her auch lieber Smile

Schnittlauch

Unkraut

BeitragSo, Feb 04, 2007 2:06
Antworten mit Zitat
Benutzer-Profile anzeigen
string = string + chr(getchar())

PS: Nur ein anreitz
Ich wars nicht.
 

Ticha

BeitragSo, Feb 04, 2007 2:16
Antworten mit Zitat
Benutzer-Profile anzeigen
so einfach geht das? Hey cool Smile Danke Smile

BtbN

BeitragSo, Feb 04, 2007 11:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Blitzcoder hat Folgendes geschrieben:
Array sind aber nicht vergrösser oder verkleinerbar



So ein schwachsinn. Arrays kann man über Slices super vergrößern und verkleinern.



Schnittlauch hat Folgendes geschrieben:
string = string + chr(getchar())


string :+ chr(getchar())
wennschon.
 

Ticha

BeitragSo, Feb 04, 2007 20:29
Antworten mit Zitat
Benutzer-Profile anzeigen
ok ich habe eure Tips umgesetzt. Er schreibt alles schön hin, nur leider öscht er den stream nicht :-I ich muss ihm ja eigentlich nur sagen, dass ich den string um eins dezimieren will, nur da mekcert er...

hier die funtkion:

Code: [AUSKLAPPEN]
Function textbar(x#,y#,laenge#,hoehe#)   
      If MouseX() > x And MouseX() < x+laenge And MouseY() < y+hoehe And MouseY() > y
         SetColor(0,0,0) 'TextField
         DrawRect(x,y,laenge,hoehe)
         SetColor(255,255,255) 'End TextFie
         text = text + Chr(GetChar())
         DrawText(text,x,y)
      ElseIf KeyHit(KEY_BACKSPACE)
         SetColor(255,255,0) 'TextField
         DrawRect(x,y,laenge,hoehe)
         SetColor(255,255,255) 'End TextFie
         text = text - Chr(1)
         DrawText(text,x,y)
      Else
          SetColor(255,255,0) 'TextField
         DrawRect(x,y,laenge,hoehe)
         SetColor(255,255,255) 'End TextFie
         DrawText(text,x,y)
      EndIf
End Function


was könnte ich da sonst machen?
 

Dreamora

BeitragSo, Feb 04, 2007 20:36
Antworten mit Zitat
Benutzer-Profile anzeigen
1 reduzieren: String = Left(string,stringl.length-1) oder mit Right wenn du das letzte zeichen wegschneiden willst.

Es gibt kein "-" für Strings, würde wenig nutzen da es nicht sagt auf welcher Seite, da Strings im Unterschied zu zahlen eine Seite haben. (das + hingegen macht sinn, da append klar definiert ist. ein anfügen vorne wäre prepend und wird normalerweise nicht gemacht)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Ticha

BeitragSo, Feb 04, 2007 20:43
Antworten mit Zitat
Benutzer-Profile anzeigen
klingt sinnvoll...

danke Smile

EDIT:

Code: [AUSKLAPPEN]
text = Left(text,stringl.length-1)


ich hab es so versucht, aber da gibt er mir einen fehler :-I

EDIT: habs doch hinbekommen

EDIT2:

Code: [AUSKLAPPEN]
Function textbar(x#,y#,laenge#,hoehe#)   
      If MouseX() > x And MouseX() < x+laenge And MouseY() < y+hoehe And MouseY() > y
         SetColor(0,0,0)
         DrawRect(x,y,laenge,hoehe)
         SetColor(255,255,255)
         
         If KeyDown(KEY_RETURN)
           text = Left(text,text.length - 1)
         Else
          text = text + Chr(GetChar())
         EndIf
         DrawText(text,x,y)      
      ElseIf MouseX() > x And MouseX() < x+laenge And MouseY() < y+hoehe And MouseY() > y   And KeyDown(BACK_RETURN)
         SetColor(0,0,0)
         DrawRect(x,y,laenge,hoehe)
         SetColor(255,255,255)
         text = Right(text,text.length - 1)
      Else
          SetColor(255,255,0)
         DrawRect(x,y,laenge,hoehe)
         SetColor(255,255,255)
         DrawText(text,x,y)
      EndIf
End Function


ich habs hier wieder versucht... ich bekomms einfach nicht hin Sad
  • Zuletzt bearbeitet von Ticha am So, Feb 04, 2007 21:14, insgesamt einmal bearbeitet
 

Dreamora

BeitragSo, Feb 04, 2007 21:11
Antworten mit Zitat
Benutzer-Profile anzeigen
du musst text. nehmen statt stringl
das zweite ist ja nur die anzahl zeichen die du willst, und die ist ja text - 1
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Ticha

BeitragSo, Feb 04, 2007 21:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
 text = Left(text,text.length - 1)



hab ich doch gemacht
 

Dreamora

BeitragSo, Feb 04, 2007 21:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo nachdem ich gepostet hab Smile

Egal: Was funktioniert denn nicht? das einzige problem das ich sehe ist deine reaktion auf "return", welche mir falsch scheint. An dem punkt müsste ein "input fertig" oder so als reaktion folgen, oder soll es multiline werden? (wobei selbst dann müsste er das)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Ticha

BeitragSo, Feb 04, 2007 21:28
Antworten mit Zitat
Benutzer-Profile anzeigen
nee das mit dem Return hab ich nur testweise gemacht, weil ich testen wollte ob es vlt an der Taste liegt, dass ich vielleicht die falsche Taste eingegeben habe, aber selbst dann macht er es nicht.

Alsoooo

es soll eine Zeile eingelesen werden. Einlesen macht er ja richtig, er liest es ein und schreibt es in einen String. Jetzt möchte ich aber, dass ich den String auch korrigieren kann. Und da liegt mein Problem :-I

Er tut es einfach nicht. Zuerst hab ich gedacht es liegt an der Abfrage, aber daran liegt es auch nicht. :-I

Horst der Biber

BeitragSo, Feb 04, 2007 22:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Jetzt möchte ich aber, dass ich den String auch korrigieren kann. Und da liegt mein Problem :-I

Du kannst einfach prüfen, ob getchar()=KEY_BACKSPACE usw. ist und dann n Stück vom String abschneiden usw.

Code: [AUSKLAPPEN]
SuperStrict

apptitle:String = "Text Input"

Graphics 640 , 480 , 0 , 60

Local char:Byte
Local text:String

Repeat
   char = GetChar()
   Select char
   Case 0
      'nix tun
   Case KEY_BACKSPACE
      text = Mid(text , 1 , Len(text) - 1)
   Default
      text:+ Chr(char)
   End Select
   Cls
   DrawText text , 0 , 0
   Flip
Until AppTerminate()
End

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group