Zeilenumbruch
Übersicht

![]() |
garretBetreff: Zeilenumbruch |
![]() Antworten mit Zitat ![]() |
---|---|---|
Im Zuge meines Projektes brauchte ich eine Funktion, die mit Zeilenumbrüchen arbeitet und den Text ausgibt. Das tut sie ![]() Das Beispiel im Buch von René Meyer versagte jedoch bei meinen Zwecken... ![]() Da die Frage irgendwann im letzten Zeitraum schon mal gestellt wurde, dachte ich mir, ich könnte die Funktion ja mal zeigen und vielleicht gibt es ja noch Verbesserungsvorschläge. Besonders die "Text"-Zeile nach Wend stört mich irgendwie noch. Ich denke aber, dass man die Funktion gebrauchen kann, besonders wenn man Dialoge formatieren will. Code: [AUSKLAPPEN] Graphics 640,480,16,2 t$="Ein langer Text, den ich mir aus Testzwecken ausgedacht habe und der keine weitere Verwendung hat." show_text(t$,300,100); Das Beispiel setzt den Text ab y=100 um x=100 gemittelt, Umbruch bei 20 WaitKey Cls show_text(t$,300,200,40); hier Umbruch bei 40 WaitKey End Function show_text(f_text$,f_x%,f_y%,f_umbruch%=20) ; Parameter: ; f_text$: der Text, der umgebrochen werden soll ; f_x/f_y: Koordinaten (um f_x wird gemittelt (siehe unten)!) ; f_umbruch: wann umgebrochen werden soll, z.B nach 20 Zeichen (momentan Standard) Local pos%,a$,text_neu$,umbrechen% While pos<Len(f_text$) pos=pos + 1 ; Zeichen für Zeichen wird durchgegangen a$=Mid(f_text$,pos,1) ; und a$ zugewiesen If pos Mod f_umbruch=0 umbrechen=1; sind mehr Zeichen als f_umbruch gelesen worden ; sollte umgebrochen werden (f_umbrechen=1) If a$<>" "; ist a$ kein Leerzeichen text_neu$=text_neu+a$; wird es einfach an die Zeichenkette rangehangen ElseIf a$=" " ; ist es aber ein Leerzeichen If umbrechen=1 ; und der Umbruch sollte erfolgen Text f_x,f_y+f_zeile*20,text_neu$,1,0; wird der Text ausgegeben f_zeile=f_zeile+1 ; und die Ausgabe rutscht eine Zeile tiefer umbrechen=0 ; ein Umbruch ist vorerst nicht mehr nötig text_neu$="" ; die Zeichenkette wird geleert ElseIf umbrechen=0 ; ist ein Umbruch nicht nötig, text_neu$=text_neu+a$; wird das Leerzeichen normal rangehangen EndIf EndIf Wend Text f_x,f_y+f_zeile*20,text_neu$,1,0; und der letzte Teil der Zeichenkette ausgegeben End Function MfG garret |
||
>>nec aspera terrent<< (Auch Widerwärtigkeiten schrecken nicht) |
![]() |
Kryan |
![]() Antworten mit Zitat ![]() |
---|---|---|
wenn, dann solltest du anstatt der anzahl der buchstaben, die breite benutzen, um den zeilenumbruch zu bewältigen...also einfach StringWidth()
hier mal meine funktion: Code: [AUSKLAPPEN] Function TextBox(txt$,x,y,w)
For j=0 To 1 Color 255,0,0 saktx=x sakty=y aktx=x akty=y For i=1 To Len(txt$) z=0 char$=Mid$(txt$,i,1) Select 1 Case Asc(char$)=35 zeichen1=Instr(txt$,"#",i+1) zeichen2=Instr(txt$," ",i+1) If zeichen1=0 And zeichen2=0 Then zeichen1=Len(txt$) If zeichen1>zeichen2 Or zeichen1=0 Then If zeichen2=0 Then z=zeichen1-i Else z=zeichen2-i End If Else z=zeichen1-i End If If z>0 Then stueck$=Mid$(txt$,i,z) If StringWidth(stueck$)+aktx>saktx+w Then Text aktx,akty,"-" akty=akty+FontHeight()+1 aktx=saktx End If End If Case Asc(char$)=32 zeichen1=Instr(txt$,"#",i+1) zeichen2=Instr(txt$," ",i+1) If zeichen1=0 And zeichen2=0 Then zeichen1=Len(txt$) If zeichen1>zeichen2 Or zeichen1=0 Then If zeichen2=0 Then z=zeichen1-i Else z=zeichen2-i End If Else z=zeichen1-i End If If z>0 Then stueck$=Mid$(txt$,i,z) If StringWidth(stueck$)+aktx>saktx+w Then akty=akty+FontHeight()+1 aktx=saktx Else aktx=aktx+StringWidth(char$) Text aktx,akty,char$ End If Else aktx=aktx+StringWidth(char$) Text aktx,akty,char$ End If Case Asc(char$)>32 Text aktx,akty,char$ aktx=aktx+StringWidth(char$) If aktx>saktx+w Then akty=akty+FontHeight()+1 aktx=saktx End If End Select Next If j=0 Then Color 196,196,196 Rect saktx-2,sakty-2,w+4,akty-sakty+FontHeight()+4 Color 100,100,100 Rect saktx,sakty,w,akty-sakty+FontHeight() End If Next End Function das "#" und das " " gelten dabei als zeichen, die für einen zeilenumbruch notwendig sind also einfach so: "Huf#eisen#magnet#feld#bilder" und daraus erscheint dann vllt sowas: Hufeisen- (nächste Zeile) magnetfeldbilder oder halt anders ^^ |
||
Webspaceanbieter?
Klick hier! Kultige Spieleschmiede? Klick hier! |
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzBasic: [AUSKLAPPEN] Function TextLines(x%,y%,width%,dat$,lines%=100,lin=1) lines% ist die maximale Zeilenanzahl. Mit Chr$(13) kann man einen Zeilenumbruch erzwingen. MfG D2006 |
||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
![]() |
garret |
![]() Antworten mit Zitat ![]() |
---|---|---|
Chr$(13) hatte ich mal ausprobiert, funktionierte aber seltsamerweise nicht...
Und statt # als Umbruchszeichen zu verwenden, kann man auch gleich mit Huf-eisen-magnet-feld-bilder arbeiten - sofern man den Bindestrich nicht braucht. Die Varianten sind gut, wenn man es in einen bestimmten Bereich zwängen will, meine hingegen habe ich nur auf die Anzahl der Zeichen bezogen geschrieben (wie gesagt das Beispiel aus dem Buch). |
||
>>nec aspera terrent<< (Auch Widerwärtigkeiten schrecken nicht) |
![]() |
Kryan |
![]() Antworten mit Zitat ![]() |
---|---|---|
ja...und wenn du es noch umschreiben würdest, würde es mir gefallen ![]() (obwohl ich sowieso meine variante präferiere) |
||
Webspaceanbieter?
Klick hier! Kultige Spieleschmiede? Klick hier! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group