Input funktion? oder selbst schreiben?
Übersicht

TichaBetreff: Input funktion? oder selbst schreiben? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() ![]() |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Ticha |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. ![]() ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ein ByteArray? Das besteht doch nur aus True und False ähnlich Boolean oder? | ||
![]() |
BlitzcoderNewsposter |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() |
||
![]() |
SchnittlauchUnkraut |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also für einzeiler mit statischer größer hat mir immer ein String gereicht. | ||
Ich wars nicht. |
Ticha |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() |
||
![]() |
SchnittlauchUnkraut |
![]() Antworten mit Zitat ![]() |
---|---|---|
string = string + chr(getchar())
PS: Nur ein anreitz |
||
Ich wars nicht. |
Ticha |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
so einfach geht das? Hey cool ![]() ![]() |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
klingt sinnvoll...
danke ![]() 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 ![]() |
||
- Zuletzt bearbeitet von Ticha am So, Feb 04, 2007 21:14, insgesamt einmal bearbeitet
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Code: [AUSKLAPPEN] text = Left(text,text.length - 1)
hab ich doch gemacht |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Jo nachdem ich gepostet hab ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group