Vielleicht hilft dir das weiter
Code: Alles auswählen
Declare Blocksatz(ab,bis,rest)
txt$="Ich bin auf der Suche nach einer Lösung um einen beliebigen Text zu einem Blocksatz zu formatieren. Ich habe natürlich ein wenig im Board nachgeforscht bin dabei aber leider nur bisher auf Beispiele gestoßen in denen erklärt wird wie beispielsweise das editor gadget so eingestellt wird das es den Text als Blocksatz anzeigt. Leider verliert der text die Formatierung wenn man ihn ausliest und abspeichert."
Structure Zeichenkette
wort.s
pixel.l
sp.l
ze.l
EndStructure
#imagenr=0
#breite=250
#linkerrand=25
If OpenWindow(0, 0, 0, 300, 260, "TextGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
anzspace=CountString(txt$," ")
anzworte=anzspace+1
Dim text.zeichenkette(anzworte+1)
LoadFont(0, "Arial", 10)
StartDrawing(WindowOutput(0))
DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(FontID(0))
sp = 0
ze = 0
br = TextWidth(" ")
hh = TextHeight(txt$)
ab = 1
bis= 1
For j=1 To anzworte
text(j)\wort = StringField(txt$, j, " ")
text(j)\pixel = TextWidth(text(j)\wort)
If sp+text(j)\pixel >= #breite-1
rest=#breite-sp
If rest
bis=j-1
Blocksatz(ab,bis,rest)
ab=j
EndIf
sp=0
ze+hh
EndIf
text(j)\sp=sp
text(j)\ze=ze
sp+text(j)\pixel+br
Next
For j=1 To anzworte
DrawText(#linkerrand+text(j)\sp,text(j)\ze,text(j)\wort)
Next
StopDrawing()
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Procedure Blocksatz(ab,bis,rest)
Shared text()
leer=bis-ab
pix=rest/leer
If pix
rest=rest-(pix*leer)
EndIf
For i=1 To pix
k=0
For j=ab To bis
text(j)\sp+k
k+1
Next
Next
For j=1 To rest
nr=bis-j+1
text(nr)\sp+rest-j+1
Next
EndProcedure
ist nicht 100% perfekt, es fehlen die IF Abfragen für die Sonderfälle in der Procedure BLOCKSATZ, aber funktioniert recht gut.
Und bevor einer meckert, ich weiß es gibt bessere Lösungen, aber diese ist recht einfach.