Någon som har ett bra exempel på en funktion som sätter automatisk radbrytning på en text där textbredden inte får överstiga 250px. vet faktiskt inte om nedan funkar bara slängde ihop nåt som såg bra ut ;-) kanske en tanke åt rätt/något håll att fortsätta på? Jag kom på att man även måste se till "hela" ord så man inte bryter mitt i ett ord. Så här långt har jag kommit nu: Så här långt har jag kommit nu:Automatisk radbrytning
Jag har redan en text från en databas som kan innehålla radbrytningar "<br>", alltså det är dumt att sätta radbrytning efter en redan existerande radbrytning. Jag använder en komponent (ASPImage) för att ta reda på textbredden. Texten får inte blir bredare än 250 px.
Image.textwidth(text)
//DanielSv: Automatisk radbrytning
Sub Q()
Text = Replace(Text, "<br>", "")
totalwidth = Image.textwidth(Text)
BrokenText = ""
Do While countwidth < totalwidth
i = i + 1
temptext = Right(Text, i)
countwidth = Image.textwidth(temptext)
If countwidth Mod 250 = 0 Then
temptext = temptext & "<BR>"
i = i + 4 'kompensera för extra tecken "<BR>"
End If
Loop
End Sub
Sv: Automatisk radbrytning
- Textbredden 250 px
- Det finns redan radbrytningar i texten "<br>" som måste finnas kvar eftersom texten ska vara läsbar i rätt rytm.
- Det får inte bryta mitt i ett ord.
Jag funderar vidare med alla loopar som man måste ha.
Kommer någon på en bra start så får ni gärna ge tips.
//DanneSv:Automatisk radbrytning
Text = "det var en Gång ett hejdundades party utanför en lite stad straxt utanför vcdvdvdv dvdvdv dvdvsdfsf er ewr wer ewr ewr er er er er ewr wserf sdfsdf sdf sdf sd fsdf sdf sdf sd f"
total = len(text)
L = 0
R = 0
Rader = 1
Do
'kollar om raden är bredare än 250 så skrivs raden ut
If Image.TextWidth(Right(Left(Text, R),R-L)) >= 250 then
Rader = Rader + 1
Response.write Right(Left(Text, R),R-L) & "<br>"
L = R
End if
'om sista raden inte är bredare än 250 så skrivs sista raden ut här
If R >=Total then
Response.write Right(Left(Text, R),R-L) & "<br>"
Exit do
End if
R = R + 1
Loop
'om texten inte är fler än 1 rad så skrivs den ut här
If Rader = 1 then
Response.write Text
end if
Om det är någon som har en idé hur jag ska göra för att inte bryta mitt i ett ord så får ni gärna meddela mig.
//Daniel
Sv: Automatisk radbrytning
Om någon har en bättre lösning får ni gärna meddela mig.
Text = "Här är exempeltexten som jag har skrivit för att kunna testa funktionen på automatisk radbrytning efter 250 px bredd. Detta för att kunna skapa PDF Filer online utan några som helst komponenter installerade på servern."
Text = Replace(Text,"¤","")
Text = Replace(Text, "<br>", "¤")
total = len(text)
L = 0
R = 0
Rader = 1
Do
If Image.TextWidth(Right(Left(Text, R),R-L)) >= 250 then
Rader = Rader + 1
If Right(Left(Text, R),R - (R-1)) = " " Then
Response.write Trim(Replace(Right(Left(Text, R),R-L),"¤","")) & "<br>"
else
Do
If Right(Left(Text, R),R - (R-1)) = " " then
exit do
end if
R = R - 1
Loop
Response.write Trim(Replace(Right(Left(Text, R),R-L),"¤","")) & "<br>"
End if
L = R
End if
If R >=Total then
Response.write Trim(Replace(Right(Left(Text, R),R-L),"¤","")) & "<br>"
Exit do
End if
hoger = Right(Left(Text, R),R - (R-1))
vad = "¤"
If hoger = vad then
Rader = Rader + 1
Response.write Trim(Replace(Right(Left(Text, R),R-L),"¤","")) & "<br>"
L = R
End if
R = R + 1
Loop
If Rader = 1 then
Response.write Trim(Replace(Text,"¤",""))
end if