Seite 1 von 1

Texteingabe

Verfasst: 17.04.2005 20:17
von estate
Hallo, ich habe ein kleines Problem:
Ich will einen Text unter direktX eingeben, was aber sehr umständlich ist.
Könnt ihr mir dabei helfen eine einfache Lösung zu finden?

Danke

Verfasst: 17.04.2005 20:21
von 125

Code: Alles auswählen

; 
; simple screen input example 
; 
; by Danilo, 2005/04/11, german forum 
; 
#ScreenWidth  = 1024 
#ScreenHeight =  768 
#ScreenName   = "Input Test" 



Procedure.s InputProcedure(x,y) 
  Static Name$, LastCursorTime, ShowCursor, BackPushed 

  ; Input holen 
  Name$ + KeyboardInkey() 

  ; Backspace erlauben zum loeschen 
  If KeyboardPushed(#PB_Key_Back) And BackPushed=0 
    Name$ = Left(Name$,Len(Name$)-1) 
    BackPushed=ElapsedMilliseconds() 
  ElseIf BackPushed 
    If ElapsedMilliseconds() >= BackPushed+150 
      BackPushed=0 
    EndIf 
  EndIf 

  ; Laenge begrenzen 
  len=Len(Name$) 
  If len>25 
    Name$ = Left(Name$,len-1) 
  EndIf 

  ; Fenster zeichnen 
  If StartDrawing(ScreenOutput()) 
    Box(x+5,y+5,300,100,$404040) 
    Box(x,y,300,100,$D7D628) 
    Box(x,y,300,22,$579FA8) 
    Line(x    ,y,300,  0,$FFFFFF):Line(x,y    ,  0,100,$FFFFFF) 
    Line(x+300,y,  0,100,$000000):Line(x,y+100,300,  0,$000000) 
    Locate(x+2,y+2) 
    DrawingMode(1) 
    DrawText("Bitte Name eingeben") 
    Box(x+09,y+29,282,24,$000000) 
    Box(x+10,y+30,280,22,$FFFFFF) 
    Locate(x+13,y+33) 
    DrawText(Name$) 

    ; cursor blinken lassen 
    time = ElapsedMilliseconds() 
    If time >= LastCursorTime+500 
      LastCursorTime=time 
      ShowCursor ! 1 
    EndIf 
    ; cursor zeichnen 
    If ShowCursor 
      ;Line(x+13+TextLength(Name$),y+32,0,18,$000000) 
      Line(x+13+TextLength(Name$),y+50,10,0,$000000) 
    EndIf 

    StopDrawing() 
  EndIf 

  If KeyboardReleased(#PB_Key_Return) And Name$ 
    ProcedureReturn Name$ 
  EndIf 
EndProcedure 



If InitSprite()=0 Or InitKeyboard()=0 
  MessageRequester("ERROR","Cant initialize game engine!"):End 
EndIf 


If OpenScreen(#ScreenWidth,#ScreenHeight,32,#ScreenName)=0 
  If OpenScreen(#ScreenWidth,#ScreenHeight,24,#ScreenName)=0 
    If OpenScreen(#ScreenWidth,#ScreenHeight,16,#ScreenName)=0 
      MessageRequester("ERROR","Cant open screen ("+Str(#ScreenWidth)+"x"+Str(#ScreenHeight)+")!"):End 
EndIf:EndIf:EndIf 


Repeat 
  ExamineKeyboard() 
  If IsScreenActive() 
    FlipBuffers() 
    ClearScreen($3A,$65,$98) 
    If Status = 0 
      Name$ = InputProcedure(#ScreenWidth/2-150,#ScreenHeight/2-50) 
      If Name$ 
        Status+1 
      EndIf 
    Else 
      If StartDrawing(ScreenOutput()) 
        FrontColor($FF,$FF,$FF) 
        DrawingMode(1) 
        Locate(100,100): DrawText("Ihre Eingabe:") 
        Locate(100,130): DrawText("Vielen Dank! Bitte drcken sie eine Taste...") 
        FrontColor($00,$00,$00) 
        Locate(200,100): DrawText(Name$) 
        StopDrawing() 
      EndIf 
      If KeyboardPushed(#PB_Key_All) 
        Quit=#TRUE 
      EndIf 
    EndIf 
  EndIf 
Until Quit
:D

Verfasst: 17.04.2005 20:27
von estate
Danke für diesen Code, leider läuft er nicht bei mir.
Kann es daran liegen, dass ich Pb Version 3.3 habe?

Verfasst: 17.04.2005 20:29
von estate
Ich sehe gerade, das meine version den Befehl keyboardinkey() noch nicht kennt.

Verfasst: 17.04.2005 20:37
von vonTurnundTaxis
3.3 ist ein "bisschen" alt! Vielleicht mal updaten? /:->

Die Beste Variante fondest du HIER
(d.h. egtl. ist die editierte Vorgängerversion am Besten... Ich finde sie aber gerade nicht)

Verfasst: 19.04.2005 15:22
von estate
Danke, das hilft mir weiter.
Ich werde mich aber einmal nach einem Update umschauen.