18. december 2006 - 21:54
Der er
5 kommentarer og
1 løsning
Klippe en tekst.
Jeg har andvendt DrawString til at tegne en tekstreng i en Graphics i en firkant. Problemet er hvis strengen er længere end en given længde skal den klippes. Så er her nogen der har en god metode til at klippe en streng ned til en given længde?
18. december 2006 - 22:13
#2
Ikke rigtigt. jeg skal tegne strengen i en firkant der måske er 30 lang. Hvis strengen så er 39 pixels bred skal strengen skæres ned så den passer til firkantens brede. Man kunne så evt. bruge measure string til at måle breden og så tage et bokstav af gangen, men vil se om der ikke findes en bedre måde.
19. december 2006 - 00:37
#3
Her et hurtigt brygget eksempel som viser hvorledes tekst kan "klippes"
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
string textSomSkalSkrives = "Slam Bam Busse";
// Simpel måling af størrelsen...
SizeF sizef = e.Graphics.MeasureString(textSomSkalSkrives, this.Font);
Size size = Size.Round(sizef);
Rectangle rectangle = new Rectangle(new Point(10, 10), size);
using (Pen pen = new Pen(Color.Magenta))
{
e.Graphics.DrawRectangle(pen, rectangle);
TextRenderer.DrawText(e.Graphics, textSomSkalSkrives, this.Font, rectangle, Color.Magenta);
}
// Forskyd eksempel 2...
Point location = new Point(rectangle.X, rectangle.Y + rectangle.Height * 2);
rectangle.Location = location;
// Udskriver testen uden padding...
using (Pen pen = new Pen(Color.Maroon))
{
e.Graphics.DrawRectangle(pen, rectangle);
TextFormatFlags textFormatFlags = TextFormatFlags.Left | TextFormatFlags.NoPadding;
TextRenderer.DrawText(e.Graphics, textSomSkalSkrives, this.Font, rectangle, Color.Maroon, textFormatFlags);
}
// Gør bounds for lille...
size = new Size(rectangle.Width / 2, rectangle.Height);
rectangle.Size = size;
// Klargører udskrift af nyt eksempel
location = new Point(rectangle.X, rectangle.Y + rectangle.Height * 2);
rectangle.Location = location;
// Udskriver teksten i for lille boks hvor resterende tegn klippes...
using (Pen pen = new Pen(Color.Black))
{
e.Graphics.DrawRectangle(pen, rectangle);
TextFormatFlags textFormatFlags = TextFormatFlags.Left | TextFormatFlags.NoPadding;
TextRenderer.DrawText(e.Graphics, textSomSkalSkrives, this.Font, rectangle, Color.Black, textFormatFlags);
}
// Klargører udskrift af nyt eksempel
location = new Point(rectangle.X, rectangle.Y + rectangle.Height * 2);
rectangle.Location = location;
// Udskriver teksten i for lille boks hvor de sidste karakterer erstattes med "..." (End Ellipsis)
using (Pen pen = new Pen(Color.Black))
{
e.Graphics.DrawRectangle(pen, rectangle);
TextFormatFlags textFormatFlags = TextFormatFlags.Left | TextFormatFlags.NoPadding | TextFormatFlags.EndEllipsis;
TextRenderer.DrawText(e.Graphics, textSomSkalSkrives, this.Font, rectangle, Color.Black, textFormatFlags);
}
// Og ja man kunne blive ved, jeg anbefaler at kigge lidt på de forskellige TextFormatFlags...
}