Dynamische Eingabe - Alternative zu Input()

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Rallimen

Sieger des 30-EUR-Wettbewerbs

Betreff: Dynamische Eingabe - Alternative zu Input()

BeitragMi, Jan 28, 2004 9:49
Antworten mit Zitat
Benutzer-Profile anzeigen
- 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

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragFr, Jan 30, 2004 1:01
Antworten mit Zitat
Benutzer-Profile anzeigen
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 !!! Wink
[BB2D | BB3D | BB+]
 

HOT-BIT

Gast

BeitragFr, 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 Wink

Toni

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragFr, Jan 30, 2004 1:51
Antworten mit Zitat
Benutzer-Profile anzeigen
würde ja bedeuten das
je weniger Antworten desto besser der Code
oder anders herum
je mehr Antworten desto miserabler der Code

Wink
[BB2D | BB3D | BB+]
 

HOT-BIT

Gast

BeitragFr, 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

BeitragFr, Jan 30, 2004 5:05
Antworten mit Zitat
Benutzer-Profile anzeigen
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!

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragFr, Jan 30, 2004 8:53
Antworten mit Zitat
Benutzer-Profile anzeigen
@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

BeitragFr, Jan 30, 2004 17:32
Antworten mit Zitat
Benutzer-Profile anzeigen
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!

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragFr, Jan 30, 2004 18:05
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Jan 30, 2004 18:24
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Jan 30, 2004 18:29
Antworten mit Zitat
Benutzer-Profile anzeigen
hast wohl noch nix von dem hier bestimmt ziemlich oft verwendeten getkey gehört? Smile
MrKeks.net

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group