Dynamische Eingabe - Alternative zu Input()
Übersicht BlitzBasic Codearchiv
RallimenSieger des 30-EUR-WettbewerbsBetreff: Dynamische Eingabe - Alternative zu Input() |
Mi, Jan 28, 2004 9:49 Antworten mit Zitat |
|
---|---|---|
- Fenstergröße paßt sich der Fragelänge und Schriftgröße an
- Hält das Programm nicht an und es lassen sich noch Animationen im Hintergrund abspielen Die Function ist mit Absicht gedehnt geschrieben mit Kommentaren, um diese eventuell anzupassen an eigene Bedürfnisse Wichtig ist nur das die Fragelänge länger ist als die maximale Zeichenanzahl der Antwort. Das kann aber auch mit Leerzeichen in der Fragestellung erzieht werden! Probiert es aus und ändert die Schriftart, die Größe des eingestellten Fonts. und ändert die Frage Code: [AUSKLAPPEN] ; Function New_Input$() dynamisch
; passt sich jeder Fontgröße an Graphics 800,600,16,2 SetBuffer BackBuffer() Global Antwort$,WarteZeit ,CursorZeit ,CursorStatus ;Font1 =LoadFont("Ariel",40,0,0,0) Font1 =LoadFont("Comic Sans MS",35,0,0,0) SetFont Font1 While Not KeyDown(1) Cls ; oder hintergund malen ; die ersten beiden werte sind die startKoordinaten des rechtecks ; dann die frage und Maximale Länge der Antwort ; die darf nicht HÖHER sein wie die FRAGE Zeichen hat Abfrage = New_Input(50,30,"Wie ist dein Name:?",10) If Abfrage = 1 Then Exit ; schleife verlassen da die Eingabe beendet ist in Antwort$ steht es jetzt drinne! ; Flip Wend End Function New_Input$ ( Rahmen_X,Rahmen_Y,Frage$,max_Lang) Rahmenbreite =StringWidth (Frage$+"XYZ");+ FontWidth ()*2) Rahmenhoehe =(FontHeight ()*4) Color 255,0,0 ; umrandung malen 2pix breit Rect Rahmen_X, Rahmen_Y,Rahmenbreite,Rahmenhoehe ,1 Color 0,0,255; innenfeld Rect Rahmen_X+2,Rahmen_Y+2, Rahmenbreite -4 , Rahmenhoehe -4,1 Color 0,0,0 ; Frage einzeichnen >> Schatten Text Rahmen_X + Rahmenbreite /2+2, Rahmen_Y+ Rahmenhoehe/4 +2 , Frage$,1,1 Color 255,255,0 ; Frage einzeichnen Text Rahmen_X + Rahmenbreite /2, Rahmen_Y+ Rahmenhoehe/4 , Frage$,1,1 a = GetKey() ; Zeichen holen wenn gedrückt ; wenn gescheites zeichen, dann hinzufügen If a > 31 And a < 256 And Len(antwort$) < max_Lang Then antwort$ = antwort$ + Chr(a) ;wenn Rücktaste dann Zeichen löschen... und Pause sonst ist der Text zu schnell gelöscht If KeyDown(14) And Len(antwort$) > 0 And MilliSecs() - WarteZeit > 125 Then antwort$ = Left(antwort$,(Len(antwort$)-1)) WarteZeit = MilliSecs() End If ; bei enter ist die Eingabe erledigt und gibt die 1 zurück If KeyDown(28) Then Return 1 ; für beenden der Input routine Antwortbreite = max_Lang * StringWidth ("Ra")/2;FontWidth() ; die maximale breite der Antwort ermitteln Startpos_der_Antwort = Rahmen_X + (Rahmenbreite /2) - (Antwortbreite/2) Color 0,0,0 Text Startpos_der_Antwort,Rahmen_Y+ Rahmenhoehe/4 *2.2, Antwort$ ; Cursor blinken If MilliSecs() - CursorZeit > 500 Then CursorStatus =CursorStatus Xor 1 ;ein - ausschalten CursorZeit= MilliSecs() End If ;Cursor malen If CursorStatus = 1 Then StartCursorX =Startpos_der_Antwort + StringWidth(antwort$) +1 texthoehe =StringHeight (antwort$) Color 255,255,0 Rect StartCursorX , Rahmen_Y+ Rahmenhoehe/4 *2.2+texthoehe*.2, StringWidth("l") , texthoehe *.6 End If End Function |
||
[BB2D | BB3D | BB+]
|
- Zuletzt bearbeitet von Rallimen am Sa, Jan 31, 2004 17:20, insgesamt einmal bearbeitet
RallimenSieger des 30-EUR-Wettbewerbs |
Fr, Jan 30, 2004 1:01 Antworten mit Zitat |
|
---|---|---|
Falls es Probleme mit dieser Function geben sollte,
würde ich mich zwar nicht freuen, aber posten solltet ihr das schon, um es zu ändern! Für weitere Anregungen bin ich natürlich offen ! Kritik ist auch erwünscht !!! |
||
[BB2D | BB3D | BB+]
|
HOT-BITGast |
Fr, Jan 30, 2004 1:39 Antworten mit Zitat |
|
---|---|---|
Hallo !
Mir ist da gerade ein Lacher raus gerutscht. Merke dir: wenn ein Code gut ist, bekommst du fast keine Antworten, kein Lob, kein gar nichts ! Also lebe damit ! Ich tu es auch Toni |
||
RallimenSieger des 30-EUR-Wettbewerbs |
Fr, Jan 30, 2004 1:51 Antworten mit Zitat |
|
---|---|---|
würde ja bedeuten das
je weniger Antworten desto besser der Code oder anders herum je mehr Antworten desto miserabler der Code |
||
[BB2D | BB3D | BB+]
|
HOT-BITGast |
Fr, Jan 30, 2004 1:55 Antworten mit Zitat |
|
---|---|---|
Hi !
Genau so ist es bis jetzt gewesen ! Schau zum Beispiel Rotierende Weihnacht von mir an. 280 Aufrufe und kein einziger Kommentar. Ist zum Lachen, ich weiß ! Toni |
||
Eisrabe |
Fr, Jan 30, 2004 5:05 Antworten mit Zitat |
|
---|---|---|
was bitte soll das prog machen? bei mir erscheint eine frage: ich gebe irgendetwas ein und wupps. programmende.
keine infos darüber, was passiert ist. zb mit meienr eingabe |
||
ich habe einCode: [AUSKLAPPEN] GOTO und ich bin bereit es einzusetzen!
|
RallimenSieger des 30-EUR-Wettbewerbs |
Fr, Jan 30, 2004 8:53 Antworten mit Zitat |
|
---|---|---|
@Eisrabe
Wer den Befehl Input() kennt weiß das dieser Befehl das ganze Program anhält bis der Text eingegeben ist! Was meistens nicht erwünscht ist! Diese Function läßt das aber zu Und das funktioniert mit jeder Schriftart, bzw Größe! Ausserdem kann die Function so wie sie jetzt ist, sofort eingebaut werden ohne Änderungen daran vorzunehmen! Hättest du den code etwas langsamer überflogen dann hättest du dieses auch gelesen[syntax="bb":1:a8ba083974]If Abfrage = 1 Then Exit ; schleife verlassen da die Eingabe beendet ist in Antwort$ steht es jetzt drinne! [/syntax:1:a8ba083974] |
||
[BB2D | BB3D | BB+]
|
Eisrabe |
Fr, Jan 30, 2004 17:32 Antworten mit Zitat |
|
---|---|---|
verstehe ich das richtig? mit dieser funktion kann man zb grafische effekte laufen lasen während man eine eingabe machen kann? ist das der nutzen?
wäre das nicht auch in einer schleife möglich? while not <entertaste gedrückt> dann a$= keyhit() : eingabe$ = eingabe$+a$ <grafic zeugs> wend oder wie? |
||
ich habe einCode: [AUSKLAPPEN] GOTO und ich bin bereit es einzusetzen!
|
RallimenSieger des 30-EUR-Wettbewerbs |
Fr, Jan 30, 2004 18:05 Antworten mit Zitat |
|
---|---|---|
Ja zu 1
Und zu 2 mit keyhit nein Dann würde wahrscheinlich soetwas rauskommen : 11111111111111111111111111111111111111111 mit keyhit muste dir erst mal ne datenbank erstellen so in etwa if keyhit( Scancode) then antwort$ = antwort$ + "x" und das für jeden Buchstaben interessant wird das erst richtig wenn du dann noch grosse und kleine buchstaben brauchst Wieviel Zeilen werden das wohl werden, bestimmt mehr wie die Getkey Routine (ca 25 zeilen ohne die Grafikklamotte ) |
||
[BB2D | BB3D | BB+]
|
Eisrabe |
Fr, Jan 30, 2004 18:24 Antworten mit Zitat |
|
---|---|---|
qbasic hat das gute [syntax="bb":1:fcb37574f2]inkey$[/syntax:1:fcb37574f2], das die gerückte taste zurückgibt. keyhit() macht das leider nciht, sondern prüft nur, ob die benannte (scancode) taste gedrück wurde.
eine echte schwäche von BB würd ich sagen |
||
ich habe einCode: [AUSKLAPPEN] GOTO und ich bin bereit es einzusetzen!
|
Mr.Keks |
Fr, Jan 30, 2004 18:29 Antworten mit Zitat |
|
---|---|---|
hast wohl noch nix von dem hier bestimmt ziemlich oft verwendeten getkey gehört? | ||
MrKeks.net |
Übersicht BlitzBasic Codearchiv
Powered by phpBB © 2001 - 2006, phpBB Group