Mehr zeilige Eingabe: Cursor an falsche Position [erledigt]
Übersicht

FlorianBetreff: Mehr zeilige Eingabe: Cursor an falsche Position [erledigt] |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Für den Chat schreibe ich eine mehrzeilige Eingabe-Funktion.
Dabei sollen Wörter die nicht mehr in die Zeile passen die die nächste Zeile umgebrochen werden. Leider wird der Cursor an der falschen Position angezeicht. Dies geschiet immer da, wenn das Wort noch grade in die Zeile passt. Der Cursor zeigt immer auf die Position ,die mit der länge des letzten wort gleich ist. Fehler behoben Code: [AUSKLAPPEN] Global ChatText$ Global ChatCursor Timer=CreateTimer(20) Graphics 640,480,0,1 Global ChatSchrift=LoadFont("Courier New",18) SetFont ChatSchrift SetBuffer BackBuffer() Repeat Cls ChatEingabe WaitTimer Timer Flip Forever Function ChatEingabe() If KeyHit( 28)=True Or KeyHit( 156)=True Then Enter=True If KeyDown(29)=True Or KeyDown(157)=True Then Strg=True If KeyDown(42)=True Or KeyDown( 54)=True Then Shift=True If KeyDown(56)=True Or KeyDown(184)=True Then Alt=True If KeyHit(205)=True Then Rechts=True If KeyHit(203)=True Then Links=True If KeyHit(199)=True Then Pos1=True If KeyHit(207)=True Then Ende=True If KeyHit(28)=True Or KeyHit(156) Then Enter=True If KeyHit(14)=True Then Backspace=True If KeyHit(211)=True Then Entf=True If KeyHit(210)=True Then Einfg=True If Shift=False And Alt=False And Strg=False Then ;Nummernblock If KeyHit( 79)=True Then Key$="1" If KeyHit( 80)=True Then Key$="2" If KeyHit( 81)=True Then Key$="3" If KeyHit( 75)=True Then Key$="4" If KeyHit( 76)=True Then Key$="5" If KeyHit( 77)=True Then Key$="6" If KeyHit( 71)=True Then Key$="7" If KeyHit( 72)=True Then Key$="8" If KeyHit( 73)=True Then Key$="9" If KeyHit( 82)=True Then Key$="0" If KeyHit(181)=True Then Key$="/" If KeyHit( 55)=True Then Key$="*" If KeyHit( 74)=True Then Key$="-" If KeyHit( 78)=True Then Key$="+" If KeyHit( 78)=True Then Key$="," If KeyHit( 2)=True Then Key$="1" If KeyHit( 3)=True Then Key$="2" If KeyHit( 4)=True Then Key$="3" If KeyHit( 5)=True Then Key$="4" If KeyHit( 6)=True Then Key$="5" If KeyHit( 7)=True Then Key$="6" If KeyHit( 8)=True Then Key$="7" If KeyHit( 9)=True Then Key$="8" If KeyHit( 10)=True Then Key$="9" If KeyHit( 11)=True Then Key$="0" If KeyHit( 30)=True Then Key$="a" If KeyHit( 48)=True Then Key$="b" If KeyHit( 46)=True Then Key$="c" If KeyHit( 32)=True Then Key$="d" If KeyHit( 18)=True Then Key$="e" If KeyHit( 33)=True Then Key$="f" If KeyHit( 34)=True Then Key$="g" If KeyHit( 35)=True Then Key$="h" If KeyHit( 23)=True Then Key$="i" If KeyHit( 36)=True Then Key$="j" If KeyHit( 37)=True Then Key$="k" If KeyHit( 38)=True Then Key$="l" If KeyHit( 50)=True Then Key$="m" If KeyHit( 49)=True Then Key$="n" If KeyHit( 24)=True Then Key$="o" If KeyHit( 25)=True Then Key$="p" If KeyHit( 16)=True Then Key$="q" If KeyHit( 19)=True Then Key$="r" If KeyHit( 31)=True Then Key$="s" If KeyHit( 20)=True Then Key$="t" If KeyHit( 22)=True Then Key$="u" If KeyHit( 47)=True Then Key$="v" If KeyHit( 17)=True Then Key$="w" If KeyHit( 45)=True Then Key$="x" If KeyHit( 44)=True Then Key$="y" If KeyHit( 21)=True Then Key$="z" If KeyHit( 40)=True Then Key$="ä" If KeyHit( 39)=True Then Key$="ö" If KeyHit( 26)=True Then Key$="ü" If KeyHit( 12)=True Then Key$="ß" If KeyHit( 57)=True Then Key$=" " If KeyHit( 27)=True Then Key$="+" If KeyHit( 43)=True Then Key$="#" If KeyHit( 53)=True Then Key$="-" If KeyHit( 52)=True Then Key$="." If KeyHit( 51)=True Then Key$="," If KeyHit( 86)=True Then Key$="<" If KeyHit( 41)=True Then Key$="^" If KeyHit( 13)=True Then Key$="´" ElseIf Alt=True And Strg=True Then If KeyHit( 3)=True Then Key$="²" If KeyHit( 4)=True Then Key$="³" If KeyHit( 5)=True Then Key$="" If KeyHit( 8)=True Then Key$="{" If KeyHit( 9)=True Then Key$="[" If KeyHit( 10)=True Then Key$="]" If KeyHit( 11)=True Then Key$="}" If KeyHit( 18)=True Then Key$="€";Euro If KeyHit( 50)=True Then Key$="µ" If KeyHit( 16)=True Then Key$="@" If KeyHit( 12)=True Then Key$="\" If KeyHit( 27)=True Then Key$="~" If KeyHit( 86)=True Then Key$="|" Else If KeyHit( 2)=True Then Key$="!" If KeyHit( 3)=True Then Key$=Chr$(34) If KeyHit( 4)=True Then Key$="§" If KeyHit( 5)=True Then Key$="$" If KeyHit( 6)=True Then Key$="%" If KeyHit( 7)=True Then Key$="&" If KeyHit( 8)=True Then Key$="/" If KeyHit( 9)=True Then Key$="(" If KeyHit( 10)=True Then Key$=")" If KeyHit( 11)=True Then Key$="=" If KeyHit( 30)=True Then Key$="A" If KeyHit( 48)=True Then Key$="B" If KeyHit( 46)=True Then Key$="C" If KeyHit( 32)=True Then Key$="D" If KeyHit( 18)=True Then Key$="E" If KeyHit( 33)=True Then Key$="F" If KeyHit( 34)=True Then Key$="G" If KeyHit( 35)=True Then Key$="H" If KeyHit( 23)=True Then Key$="I" If KeyHit( 36)=True Then Key$="J" If KeyHit( 37)=True Then Key$="K" If KeyHit( 38)=True Then Key$="L" If KeyHit( 50)=True Then Key$="M" If KeyHit( 49)=True Then Key$="N" If KeyHit( 24)=True Then Key$="O" If KeyHit( 25)=True Then Key$="P" If KeyHit( 16)=True Then Key$="Q" If KeyHit( 19)=True Then Key$="R" If KeyHit( 31)=True Then Key$="S" If KeyHit( 20)=True Then Key$="T" If KeyHit( 22)=True Then Key$="U" If KeyHit( 47)=True Then Key$="V" If KeyHit( 17)=True Then Key$="W" If KeyHit( 45)=True Then Key$="X" If KeyHit( 44)=True Then Key$="Y" If KeyHit( 21)=True Then Key$="Z" If KeyHit( 40)=True Then Key$="Ä" If KeyHit( 39)=True Then Key$="Ö" If KeyHit( 26)=True Then Key$="Ü" If KeyHit( 12)=True Then Key$="?" If KeyHit( 27)=True Then Key$="*" If KeyHit( 43)=True Then Key$="'" If KeyHit( 53)=True Then Key$="_" If KeyHit( 52)=True Then Key$=":" If KeyHit( 51)=True Then Key$=";" If KeyHit( 86)=True Then Key$=">" If KeyHit( 41)=True Then Key$="°" If KeyHit( 13)=True Then Key$="`" If KeyHit( 30)=True Then Strg_A=True If KeyHit( 46)=True Then Strg_C=True If KeyHit( 47)=True Then Strg_V=True If KeyHit( 45)=True Then Strg_X=True EndIf If Len(Key$)>0 Then ChatText$=Left$(ChatText$,ChatCursor)+Key$+Mid$(ChatText$,ChatCursor+1) ChatCursor=ChatCursor+1 ElseIf Enter=True Then ElseIf Einfg=True Then ElseIf Ende=True And Shift=True And Strg=True Then ElseIf Pos1=True And Shift=True And Strg=True Then ElseIf Ende=True And Strg=True Then ChatCursor=Len(ChatText$) ElseIf Pos1=True And Strg=True Then ChatCursor=0 ElseIf Ende=True And Shift=True Then ElseIf Pos1=True And Shift=True Then ElseIf Pos1=True Then ElseIf Ende=True Then ;ZeilenEnde(Text$,UmBruch,ZeilenNr) ElseIf Backspace=True Then If ChatCursor>0 Then ChatText$=Left$(ChatText$,ChatCursor-1)+Mid$(ChatText$,ChatCursor+1) ChatCursor=ChatCursor-1 EndIf ElseIf Entf=True Then ChatText$=Left$(ChatText$,ChatCursor)+Mid$(ChatText$,ChatCursor+2) ElseIf Strg_A=True Then ElseIf Strg_C=True Then ElseIf Strg_V=True Then ElseIf Strg_X=True Then ElseIf Rechts=True And Strg=True And Shift=True Then ElseIf Links= True And Strg=True And Shift=True Then ElseIf Rechts=True And Strg=True Then ElseIf Links= True And Strg=True Then ElseIf Rechts=True And Shift=True Then ElseIf Links =True And Shift=True Then ElseIf Rechts=True Then If Len(ChatText$)>ChatCursor Then ChatCursor=ChatCursor+1 EndIf ElseIf Links=True Then If ChatCursor>0 Then ChatCursor=ChatCursor-1 EndIf EndIf Color 255,255,255 SetFont ChatSchrift SuperText ChatText$,50,0,0 Zeilen=SuperTextZeilen(Left$(ChatText$,ChatCursor)+"|"+Mid$(ChatText$,ChatCursor+1),50) CursorZeile=ZeichenInZeile(ChatText$,50,ChatCursor) CursorSpalte=ZeichenInSpalte(ChatText$,50,ChatCursor) If CursorZeile>Zeilen Then CursorSpalte=1 Color 255,0,255 Rect StringWidth("a")*(CursorSpalte-1),FontHeight()*(CursorZeile-1),1,FontHeight() Text 100,100,CursorZeile Text 100,150,CursorSpalte Text 100,200,Zeilen End Function Function ZeilenEnde(Text$,UmBruch,ZeilenNr) Text$=Text$+String(" ",UmBruch*20) LenText=Len(Text$) Umbruch=Umbruch+1 Mal=Ceil#(LenText/Umbruch)+1 For xMal=1 To Mal bis=InStr2(Text$," ",Umbruch) If String(" ",Bis-1)<>Mid$(Text$,1,Bis-1) Then If Mid$(Text$,1,Bis-1)<>"" Then ZeichenPos=ZeichenPos+Bis Zeile=Zeile+1 If ZeilenNr=Zeile Then TextZeile$=(Mid$(Text$,1,Bis-1)) TextZeileLang=Len(TextZeile$) For P=1 To TextZeileLang If Mid$(TextZeile$,P,1)<>" " Then TextZeile$=Mid$(TextZeile$,P) TextZeileLang=TextZeileLang+1-P Exit EndIf Next For P=TextZeileLang To 1 Step-1 If Mid$(TextZeile$,P,1)<>" " Then TextZeile$=Mid$(TextZeile$,1,P) Exit EndIf Next Return Len(TextZeile$) EndIf EndIf End If If InStr3(Text$," ",Umbruch)=-1 Then Text$=Mid$(Text$,Bis+1) Else Text$=Mid$(Text$,Bis) End If Next End Function Function ZeichenInSpalte(Text$,UmBruch,ZeichenNr) Text$=Text$+String(" ",UmBruch*20) LenText=Len(Text$) Umbruch=Umbruch+1 Mal=Ceil#(LenText/Umbruch)+1 For xMal=1 To Mal bis=InStr2(Text$," ",Umbruch) If String(" ",Bis-1)<>Mid$(Text$,1,Bis-1) Then If Mid$(Text$,1,Bis-1)<>"" Then ZeichenPos=ZeichenPos+Bis Zeilelang=Len(Mid$(Text$,1,Bis-1)) If ZeichenPos>ZeichenNr Then Return Bis-(ZeichenPos-ZeichenNr)+1 EndIf Zeile=Zeile+1 EndIf End If If InStr3(Text$," ",Umbruch)=-1 Then Text$=Mid$(Text$,Bis+1) Else Text$=Mid$(Text$,Bis) End If Next Return 1 End Function Function ZeichenInZeile(Text$,UmBruch,ZeichenNr) Text$=Text$+String(" ",UmBruch*20) LenText=Len(Text$) Umbruch=Umbruch+1 Mal=Ceil#(LenText/Umbruch)+1 For xMal=1 To Mal bis=InStr2(Text$," ",Umbruch) If String(" ",Bis-1)<>Mid$(Text$,1,Bis-1) Then If Mid$(Text$,1,Bis-1)<>"" Then Zeile=Zeile+1 ZeichenPos=ZeichenPos+Bis Zeilelang=Len(Mid$(Text$,1,Bis-1)) If ZeichenPos>ZeichenNr Then Return Zeile EndIf EndIf End If If InStr3(Text$," ",Umbruch)=-1 Then Text$=Mid$(Text$,Bis+1) Else Text$=Mid$(Text$,Bis) End If Next Return Zeile+1 End Function Function ZeichenInZeile2(Text$,UmBruch,ZeichenNr) Text$=Text$+String(" ",UmBruch*20) LenText=Len(Text$) Umbruch=Umbruch+1 Mal=Ceil#(LenText/Umbruch)+1 For xMal=1 To Mal bis=InStr2(Text$," ",Umbruch) If String(" ",Bis-1)<>Mid$(Text$,1,Bis-1) Then If Mid$(Text$,1,Bis-1)<>"" Then ZeichenPos=ZeichenPos+Bis Zeile=Zeile+1 If ZeichenPos-Zeile=>ZeichenNr-2 Then Return Zeile EndIf EndIf End If If InStr3(Text$," ",Umbruch)=-1 Then Text$=Mid$(Text$,Bis+1) Else Text$=Mid$(Text$,Bis) End If Next Return Zeile+1 End Function Function SuperTextZeilen(Text$,UmBruch) Text$=Text$+String(" ",UmBruch*20) LenText=Len(Text$) Umbruch=Umbruch+1 Mal=Ceil#(LenText/Umbruch)+1 For xMal=1 To Mal bis=InStr2(Text$," ",Umbruch) If String(" ",Bis-1)<>Mid$(Text$,1,Bis-1) Then If Mid$(Text$,1,Bis-1)<>"" Then Zeile=Zeile+1 End If If InStr3(Text$," ",Umbruch)=-1 Then Text$=Mid$(Text$,Bis+1) Else Text$=Mid$(Text$,Bis) End If Next Return Zeile End Function Function SuperText(Text$,UmBruch,X,Y) Text$=Text$+String(" ",UmBruch*20) LenText=Len(Text$) Umbruch=Umbruch+1 Mal=Ceil#(LenText/Umbruch)+1 For xMal=1 To Mal bis=InStr2(Text$," ",Umbruch) If String(" ",Bis-1)<>Mid$(Text$,1,Bis-1) Then Text x,y,Mid$(Text$,1,Bis-1) Y=y+ FontHeight () End If If InStr3(Text$," ",Umbruch)=-1 Then Text$=Mid$(Text$,Bis+1) Else Text$=Mid$(Text$,Bis) End If Next End Function Function InStr2(S$,F$,Ende) For X=Ende To 1 Step -1 If Mid$(S$,X,1)=F$ Then Return X End If Next Return Ende End Function Function InStr3(S$,F$,Ende) For X=Ende To 1 Step -1 If Mid$(S$,X,1)=F$ Then Return -1 End If Next Return 0 End Function |
||
- Zuletzt bearbeitet von Florian am Sa, Feb 04, 2006 16:39, insgesamt einmal bearbeitet
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bevor du noch weitere Zeilen zur Abfrage einzelner Tasten benutzt würde ich mir erst mal noch GetKey anschauen... Eventuell kann dieser nicht alle Codes abfangen, da kann man das eine oder andere weiterhin per KeyHit machen. Aber einen enormen Zeileneinschub würde es sicherlich bringen...Code: [AUSKLAPPEN] Graphics 400,400,0,2
SetBuffer FrontBuffer() a%=0 b$="" Print "Taste drücken!" While Not KeyHit(1) a=GetKey() If a>0 If a=8 b=Left(b,Len(b)-1) Else b=b+Chr$(a) End If Cls Text 0,0,b+"|" End If Wend End Um den Cursor dahin zu bekommen, wo du ihn haben willst, würde ich den Cursor als auch ein Bestandteil zum letzten Wort machen. Dann würde zumindest nicht der Cursor alleine da unten stehen... Oder du machst die Eingrenzung mit Cursor einen Schritt weiter als ohne Cursor... |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group