Zeilenumbruch
Übersicht

Temp_Meister_DiebBetreff: Zeilenumbruch |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hiermit kann man Zeilenumbrüche machen.
Ich finde es ganz nützlich. Code: [AUSKLAPPEN] Function SplitText(ss$,max,x,y,widt,height) max=max+1 Dim row$(100) sx=x sy=y ;aufteilen l=Len(ss$) teile=l/max For i=1 To l t=t+1 If t=max y=y+height x=sx t=0 Else Text x,y,Mid(ss$,i,1) x=x+widt EndIf Next End Function Nicht zu vergessen: Man muss ein Dimfeld namens row$(100) erstellen. ss$=Satz$ max=Wie viel Buchstaben in einer reihe stehen sollen x=x ![]() y=y ![]() width=wie viel pixel sollen die buchstebn der x koord auseinander stehen? height=wie width nur halt für y Das Wars. Hoffentlich gefällts euch. mfg Meister_Dieb |
||
°kal Online° |
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
und jetzt eine Variante ohne Dim-Feld ![]() Und mit einer anderen Idee. Hier gibt man den Rahmen an, in dem der Text stehen soll (durch pX, pY, w, h). Ist aber auch noch nicht perfekt. So geschieht der Zeilenumbruch auch mitten im Wort, aber kann ja jeder dran rumschrauben... Code: [AUSKLAPPEN] Graphics 800, 600, 16, 2
SetBuffer BackBuffer() Zeilenumbruch "Hallo dieses ist ein Zeilenumbruch-Text, er ist lang und benötigt deswegen den Zeilenumbruch", 100, 100, 100, 150 WaitKey() End Function Zeilenumbruch (t$, pX, pY, w, h) Rect pX, pY, w, h, 0 nx = pX ny = pY nt$ = "" i = 0 lt = Len(t$) While Len(t$) > 0 i = i + 1 If StringWidth(Left$(t$, i)) < w And i <= Len(t$) Then nt$ = Left$(t$, i) Else Text nx, ny, nt$ t$ = Mid$(t$, i, -1) i = 0 nt$ = "" ny = ny + 1.2 * StringHeight(t$) End If Wend End Function |
||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
dann benutz doch noch die funktion
Code: [AUSKLAPPEN] Function IsAbleToWrap(char$)
Select char Case "." AbleToWrap = True Case "," AbleToWrap = True Case ";" AbleToWrap = True Case ":" AbleToWrap = True Case "!" AbleToWrap = True Case "?" AbleToWrap = True Case "-" AbleToWrap = True Case " " AbleToWrap = True Default AbleToWrap = False End Select Return AbleToWrap End Function |
||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
Krümel |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
wenn du die Funktion Rekursiv machst kannst du noch ein paar zeilen sparen:
Code: [AUSKLAPPEN] ZeilenUmbruch("Hallo dieses ist ein Zeilenumbruch-Text, er ist lang und benötigt deswegen den Zeilenumbruch",50,50, 150)
WaitKey Function ZeilenUmbruch(Txt$,px,py, w) If txt="" Or w<FontWidth() Return Text px,py,Mid$(Txt,1,(w/FontWidth())) ZeilenUmbruch(Mid$(Txt,(w/FontWidth())+1), px,py+FontHeight(), w) End Function |
||
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
Krümel hat Folgendes geschrieben: wenn du die Funktion Rekursiv machst kannst du noch ein paar zeilen sparen:
Wow! Hast recht. Sieht eleganter aus. ![]() Jetzt ist es wieder Geschmackssache, ob man die rekursive oder die iterative Variante bevorzugt. |
||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sooo, jetzt mal mein finaler Code:Code: [AUSKLAPPEN] Function SplitString(msg$,x,y,w%,style) ;Style:0normal,1 zentriert; w gibt die breite an If StringWidth(msg$) < w Then If style=0 Then Text x,y,msg If style=1 Then Text (x+(w/2))-(StringWidth(msg)/2),y,msg$ Else For char = 1 To Len(msg$) i=i+1 If StringWidth(Left(msg$, char)) > w Repeat char = char - 1 Until IsAbleToWrap(Mid(msg$,char,1)) If style=0 Then Text x,y,Left(msg$,char) If style=1 Then Text (x+(w/2))-StringWidth(Left(msg$,char))/2,y,Left(msg$,char) SplitString(Trim(Right(msg$,Len(msg$)-char)),x,y+FontHeight()+3, w,style) Exit End If Next End If End Function Function IsAbleToWrap(char$) Select char Case "." AbleToWrap = True Case "," AbleToWrap = True Case ";" AbleToWrap = True Case ":" AbleToWrap = True Case "!" AbleToWrap = True Case "?" AbleToWrap = True Case "-" AbleToWrap = True Case " " AbleToWrap = True Default AbleToWrap = False End Select Return AbleToWrap End Function |
||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
![]() |
Hip Teen |
![]() Antworten mit Zitat ![]() |
---|---|---|
warum schreibst du statt
Code: [AUSKLAPPEN] Select char
Case "." AbleToWrap = True Case "," AbleToWrap = True Case ";" AbleToWrap = True Case ":" AbleToWrap = True Case "!" AbleToWrap = True Case "?" AbleToWrap = True Case "-" AbleToWrap = True Case " " AbleToWrap = True Default AbleToWrap = False End Select nicht einfach Code: [AUSKLAPPEN] Select char
Case ".", ",", ";", ":", "!", "?", "-", " " AbleToWrap = True Default AbleToWrap = False End Select sieht für mich übersichtlicher und nach weniger Schreibarbeit aus... |
||
Spruch der Woche: "Ahh, ein neues Gesicht?!" - "Nein, das hab ich schon länger" |
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich find meins übersichtlicher... | ||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
Und jetzt noch mal ein Zeilenumbruch, der Leerzeichen berücksichtigt und nur ganze Wörter umbricht.
Code: [AUSKLAPPEN] Graphics 800, 600, 16, 2
AppTitle ("Beispiel für ein Textfeld von SpionAtom") SetBuffer BackBuffer() t$ = "Es war einmal ein kleiner Programmierer, der war sehr hungrig. Also aß er seine Tastatur auf. Dabei achtete er aber nicht darauf, dass er keine F-Tasten vertug. Also bekam er Bauchschmerzen. Und da half nur noch ein kräftiger Schluck aus der Druckerpatrone. Und am Ende konnte er wieder gesund und zufrieden programmieren." textFeld (t$, 100, 100, 400, 300) Flip() WaitKey() End() Function textFeld (t$, pX, pY, w, h) Rect pX, pY, w, h, 0 nx = pX ny = pY zeilen = 0 nt$ = "" i = 0 lt = Len(t$) While Len(t$) > 0 i = i + 1 If StringWidth(Left$(t$, i)) < w And i <= Len(t$) Then nt$ = Left$(t$, i) Else For j = Len(nt$) To 1 Step -1 If Mid$(nt$, j, 1) = " " Then nt$ = Left$(nt$, j) i = j + 1 Exit End If Next Text nx, ny, nt$ t$ = Mid$(t$, i, -1) i = 0 nt$ = "" ny = ny + 1.2 * StringHeight(t$) zeilen = zeilen + 1 If (zeilen + 1) * (1.2 * StringHeight(t$)) => h Then Exit End If Wend Print zeilen End Function |
||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
- Zuletzt bearbeitet von SpionAtom am Sa, Sep 16, 2006 14:04, insgesamt einmal bearbeitet
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
maht meiner doch auch *g* | ||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
Goodjee hat Folgendes geschrieben: maht meiner doch auch *g*
Das kommt davon, wenn man sich die anderen Posts nicht richtig anschaut ![]() Dafür kommt bei mir kein Fehler, wenn die Feldbreite kleiner als eines der Wörter ist ![]() Und meines ist auch nach unten begrenzt (wers braucht.) |
||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
![]() |
StepTiger |
![]() Antworten mit Zitat ![]() |
---|---|---|
deins ist allgemein umständlich, da man nie weiß, wie hoch das ganze wird. Also sollte man den Rahmen erst am Ende zeichnen.
Außerdem ist ein kleiner Fehler im Text |
||
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer: AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t Gewinner: BP Code Compo #2 Π=3.141592653589793238...<--- und das aus dem kopf ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
StepTiger hat Folgendes geschrieben: deins ist allgemein umständlich, da man nie weiß, wie hoch das ganze wird. Also sollte man den Rahmen erst am Ende zeichnen.
Außerdem ist ein kleiner Fehler im Text Das mit dem Rahmen ist ja beabsichtigt, zu langer Text wird abgeschnitten. Ich finde beide Arten (mit/ohne Begrenzung nach unten) sinnvoll, kommt halt aufs Anwendungsgebiet an. Ich hoffe, dass jetzt alle Fehler ausgebügelt sind^^ |
||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
![]() |
FreetimeCoder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab mal die Version von "SpionAtom" weiterverwendet:
Code: [AUSKLAPPEN] Graphics 800, 600, 16, 2
AppTitle ("Beispiel für ein Textfeld von SpionAtom mit Scrolling von FreetimCoder") SetBuffer BackBuffer() a = 0 MSG$ = "Dies ist ein Test um den Zeilenumbruch mit scrolling zu üben. Aber das klappt noch nicht so gut und deswegen muss der Text verlängert werden. Klappt trotzdem nicht :( Jetzt klappts schon *Freu* :) " While ml < Len(MSG$)+1 Cls textFeld(Left$(MSG$,ml)+" ", 100, 100, 400, 300) Delay(50) ml = ml + 1 Flip Wend WaitKey() Function textFeld (t$, pX, pY, w, h) nx = pX ny = pY zeilen = 0 nt$ = "" i = 0 lt = Len(t$) While Len(t$) > 0 i = i + 1 If StringWidth(Left$(t$, i)) < w And i <= Len(t$) Then nt$ = Left$(t$, i) Else For j = Len(nt$) To 1 Step -1 If Mid$(nt$, j, 1) = " " Then nt$ = Left$(nt$, j) i = j + 1 Exit End If Next Text nx, ny, nt$ t$ = Mid$(t$, i, -1) i = 0 nt$ = "" ny = ny + 1.2 * StringHeight(t$) zeilen = zeilen + 1 If (zeilen + 1) * (1.2 * StringHeight(t$)) => h Then Exit End If Wend End Function Jetzt wird der Text gescrollt und ganze Wörter werden beim Zeilenumbruch berücksichtigt. |
||
"Wir haben keine Chance, aber wir werden sie nutzen!"
Projekte: Dexterity Ball (100%) Aquatic Atmosfear (22 % ca 4700 Zeilen) eingefrohren mangels OOP Fähigkeiten von Blitz (ehemals Uboot) PC: Intel D 3 GHz | NVidiaGforce 6700 256 Mb | 1024 Mb DDR RAM 400 Mhz | 2x160 GB S-ATA |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group