Da waren noch mehr "Fehler". War halt nur ein Beispiel und kein Code, den man so ohne weiteres übernehmen konnte (z.B. feste ID des Bildes etc...)
Die Funktion erwartet jetzt eine Position (X/Y), die Breite (nach wie vor) und den Zeilenabstand,
Der Zeilenabstand versteht sich in Pixel, solange er unter 100 liegt.
Ab 100 (eigtl 101) wird er als Prozentwert in Relation zu TextHeight() ausgelegt.
200 ergibt also einen Zeilenabstand, der gleich dem Ergebnis von TextHeight() ist (also genau eine Zeile Abstand).
Es wird keine ImageID mehr erwartet. Der Befehl muss zwischen Start- und StopDrawing() aufgerufen werden.
Desweiteren werden alle manuellen Zeilenumbrüche ausgewertet (#CR$, #LF$ und #CRLF$)
Code: Alles auswählen
EnableExplicit
Procedure DrawLBText(x.i, y.i, width.i, text.s, lineDistance.i = 0)
Protected line.s
Protected textheight.i
Protected k.i
Protected loop.i
Protected lineDistanceFloat.f
text = ReplaceString(text, #CRLF$, #CR$)
text = ReplaceString(text, #LF$, #CR$)
text = ReplaceString(text, #CR$, #CR$+" ")
textheight = TextHeight("X")
If linedistance > 100
linedistanceFloat = lineDistance / 100
lineDistance = textheight * lineDistanceFloat
textheight = lineDistance
Else
textheight + lineDistance
EndIf
k = CountString(text," ")+1
For loop = 1 To k
If TextWidth(line + StringField(text, loop, " ")) < width And Trim(Right(line, 2)) <> #CR$
line = line + StringField(text,loop," ")+" "
Else
line = ReplaceString(line, #CR$, "")
DrawText(x, y, line)
y + textheight
line = StringField(text, loop, " ") + " "
EndIf
Next
If line > ""
DrawText(x,y,line)
EndIf
EndProcedure
Define test.s = "Ist es irgendwie möglich im DrawText()-Befehl einen "
test + "Zeilenumbruch einzufügen?" +#CRLF$ +#CRLF$
test + "Ich mache gerade einen Splash-Screen und will "
test + "während der Ladezeit einen 'Tipp des Tages' anzeigen (welche in einem Tips.s() "
test + "Array gespeichert sind). Da 100% der Texte über die Splash-Breite gehen, "
test + "müsste ich jedesmal für einen Zeilenabsatz ein neues DrawText() aufrufen."
test + #CRLF$ + #CRLF$
test + "Good bye!"
LoadFont(0, "Arial", 12)
CreateImage(0, 300, 500)
StartDrawing(ImageOutput(0))
DrawingMode(#PB_2DDrawing_Gradient)
FrontColor($0000FF)
BackColor($FF0000)
LinearGradient(0,0,300,500)
Box(5,5,290,490)
DrawingMode(#PB_2DDrawing_Transparent)
FrontColor($00FFFF)
DrawingFont(FontID(0))
DrawLBText(5, 5, 290, test, 150)
StopDrawing()
OpenWindow(0,0,0,300,500,"DrawText LineBreak",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ImageGadget(0,0,0,300,500,ImageID(0))
Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow