Non c'è un metodo per determinare, data una stringa e un'oggetto di tipo FontStyle, la dimensione in pixel che quella stringa occupa sullo schermo?
si si, è il metodo .MeasureString() di System.Drawing.Graphics.
Troncare una stringa nel metodo tradizionale, cioè contandone i caratteri, non è un metodo tanto efficace perchè i caratteri hanno larghezza variabile. Una stringa composta da 30 "i" ha una lunghezza differrente di una che contiene 30 "W".
Per questo usare .MeasureString() è di certo di preciso, anche se leggermente più dispendioso in termini di prestazioni (ma solo pochino) :)
io ho questa funzione:
Dim bitm As New System.Drawing.Bitmap(1,1)
Dim g As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(bitm)
Function chop$(stringa$, larg%)
return chop(stringa, larg, false)
End Function
Function chop$(stringa$, larg%, isBold As Boolean)
Dim finale$ = stringa
if larg > 0 then
Dim miofont As System.Drawing.Font
if isBold then
miofont = new System.Drawing.Font("Verdana",11,System.Drawing.FontStyle.Bold,System.Drawing.GraphicsUnit.pixel)
else
miofont = new System.Drawing.Font("Verdana",11,System.Drawing.FontStyle.Regular,System.Drawing.GraphicsUnit.pixel)
end if
Dim chopped As Boolean = false
while g.MeasureString(finale, miofont).width > larg
finale = Left(finale, Len(finale)-1)
chopped = true
end while
if chopped then
while g.MeasureString(finale, miofont).width > larg-15
finale = Left(finale, Len(finale)-1)
end while
finale &= "..."
end if
end if
if isBold then return "<b>" & finale & "</b>" else return finale
End Function
e la uso così:
Response.write("testo", 50)
oppure
Response.write("testo", 50, true)
se il testo in questione è in grassetto.
50 rappresenta la lunghezza massima in pixel della stringa. Se è più lunga, la tronca a un po' meno di 50 e gli aggiunge tre puntini ...
Puoi modificarla a tuo piacimento.
Non passo alcun dato alla funzione riguardante il font perchè nei miei siti di solito uso Verdana a 11px e l'ho messo come costante all'interno della funzione stessa.
ciao
Modificato da BrightSoul il 03 agosto 2004 15.55 -