Problem bei der Berechnung der Textlänge

14/11/2009 - 23:34 von Dirk Herwig | Report spam
Hallo,

ich habe mir einen Lauftext geschrieben, welcher beim kompletten Durchlauf
von rechts nach links wieder von vorn beginnt. Klappt soweit auch, nur dass
der Text nicht komplett durchlàuft. Das UserControl ist abgeleitet vom
Label.

Die Textlànge berechne ich so:
SizeF m = TextRenderer.MeasureText(textfeld, this.Font);
textlaenge = m.Width;
texthoehe = m.Height;

Der Lauftext wird durch einen Ticker gesteuert:
private void timer1_Tick(object sender, EventArgs e)
{
if (position + textlaenge < 0)
{
position = this.Width;
}
else
{
position--;
}
this.Refresh();
}


protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
SolidBrush myBrush = new SolidBrush(this.ForeColor);

g.DrawString(textfeld, this.Font, myBrush, position,
((this.Height / 2.0f) - (texthoehe / 2.0f)));
}

Sieht von Euch jemand, was ich hier falsch gemacht habe? Wie gesagt, der
Text làuft nicht bis zum Ende der gesamten Textlànge durch, sondern beendet
sich um fast ein ganzes Wort zu früh.

Dirk
 

Lesen sie die antworten

#1 FGoller
15/11/2009 - 08:54 | Warnen spam
Dirk Herwig schrieb:
Hallo,

ich habe mir einen Lauftext geschrieben, welcher beim kompletten
Durchlauf von rechts nach links wieder von vorn beginnt. Klappt soweit
auch, nur dass der Text nicht komplett durchlàuft. Das UserControl ist
abgeleitet vom Label.

Die Textlànge berechne ich so:
SizeF m = TextRenderer.MeasureText(textfeld, this.Font);
textlaenge = m.Width;
texthoehe = m.Height;

Der Lauftext wird durch einen Ticker gesteuert:
private void timer1_Tick(object sender, EventArgs e)
{
if (position + textlaenge < 0)
{
position = this.Width;
}
else
{
position--;
}
this.Refresh();
}


protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
SolidBrush myBrush = new SolidBrush(this.ForeColor);

g.DrawString(textfeld, this.Font, myBrush, position,
((this.Height / 2.0f) - (texthoehe / 2.0f)));
}

Sieht von Euch jemand, was ich hier falsch gemacht habe? Wie gesagt, der
Text làuft nicht bis zum Ende der gesamten Textlànge durch, sondern
beendet sich um fast ein ganzes Wort zu früh.

Dirk



Guten Morgen,
ich habe das mal auf die schnelle getestet und bei mir hat es
funktioniert. Mich wundert aber ein bisschen, dass du this.Font (also
Form.Font) anstatt label.Font verwendest. Angenommen du hàttest in
deiner Anwendung unterschiedliche Schriftgrößen vermischt, dann könnte
der beschriebene Fehler zustande kommen.

Ähnliche fragen