Seite 1 von 1
Blocksatz Exportiern oder Exportierbar machen
Verfasst: 22.09.2007 12:38
von supra
Moin Moin
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.
Hat jemand evtl ein Beispiel oder eine Idee ?

Verfasst: 22.09.2007 13:13
von Scarabol
Hi,
das Problem am blocksatz ist, dass die Leerzeichen und Buchstaben so gedehnt werden, dass sie eben einen Block ergeben. Dies kann man natürlich nicht speichern.
Wie der Text angezeigt wird hängt allein von dem Programm am mit dem man ihn läd.
Währ also gut wenn du näher beschreibst was du mit dem Text genau vorhast...
Allgemein gesagt würde ich jetzt auf Textwidth(), deine Mathekenntnisse verweisen...
Gruß
Scarabol
Verfasst: 22.09.2007 13:26
von mk-soft
Selber berechnen.
Ist noch nicht ganz vollständig
Code: Alles auswählen
; Blocksatz
Define.s text, result
Define.f lenblock, countspace, countchar, newspace
text = "Hallo Welt, dies ist ein Satz im Block format"
lenblock = 80
countspace = CountString(text, " ")
countchar = Len(text) - countspace
newspace = (lenblock - countchar) / countspace
result = ReplaceString(text, " ", Space(newspace))
fehlspace = lenblock - Len(result)
Debug text
Debug result
Debug Len(result)
FF

Verfasst: 22.09.2007 13:49
von supra
@Scarabol
ich möchte einen Text auf eine bestimmte Anzahl von Zeichen pro Zeile
formatieren dabei müssen aber halt die Wörter so erhalten bleiben wie sie sind. Außerdem sollte jedes Zeilenende nicht mit einem Leerzeichen aufhören damit der Blocksatz auch gut aussieht ^^
mk-soft weiß glaube ich was ich meinte sieht zumindest schon von der Richtung her gut aus mal sehn ob ich darauf aufbauen kann :x
Verfasst: 22.09.2007 14:04
von Scarabol
@Mk-Soft
Dein Ansatz ist gut funktioniert aber so nicht einwandfrei, da du nicht die Buchstaben vergleichen kannst sondern nur die Textlänge.
Schon allein weil ein i nicht breit ist wie ein M.
Gruß
Scarabol
Verfasst: 24.09.2007 00:08
von hjbremer
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.
Verfasst: 28.09.2007 19:11
von supra
ah vielen dank der code funktioniert echt ganz gut
