2023-03-01 00:21:03 +08:00

158 lines
2.6 KiB
C#

using System;
using System.Drawing;
namespace GoldPrinter
{
public class DrawText : DrawBase
{
private string _text;
private Font _font;
private StringFormat _stringFormat;
private int _startChar;
private int _linesFilled;
private int _charsFitted;
//private bool _hasMorePages;
private static int intCurrentCharIndex;
public string Text
{
get
{
return this._text;
}
set
{
this._text = value;
}
}
public Font Font
{
get
{
return this._font;
}
set
{
if (value != null)
{
this._font = value;
}
}
}
public StringFormat StringFormat
{
get
{
return this._stringFormat;
}
set
{
this._stringFormat = value;
}
}
public int StartChar
{
get
{
return this._startChar;
}
set
{
this._startChar = value;
if (this._startChar < 0)
{
this._startChar = 0;
}
else if (this._startChar >= this.Text.Length)
{
this._startChar = this.Text.Length;
}
}
}
public int CharsFitted
{
get
{
return this._charsFitted;
}
}
public int LinesFilled
{
get
{
return this._linesFilled;
}
}
public DrawText()
{
this._text = "";
this._font = new Font("宋体", 10f);
this._startChar = 0;
this._linesFilled = 0;
this._charsFitted = 0;
this._stringFormat = new StringFormat(StringFormatFlags.LineLimit);
}
public DrawText(string text) : this()
{
this._text = text;
}
public override void Dispose()
{
base.Dispose();
this._font.Dispose();
this._stringFormat.Dispose();
}
private void DrawOnePage()
{
if (base.Graphics != null)
{
int charsFitted;
int linesFilled;
base.Graphics.MeasureString(this._text.Substring(this._startChar), this._font, new SizeF((float)base.Rectangle.Width, (float)base.Rectangle.Height), this._stringFormat, out charsFitted, out linesFilled);
base.Graphics.DrawString(this._text.Substring(this._startChar), this._font, base.Brush, base.Rectangle, this._stringFormat);
this._linesFilled = linesFilled;
this._charsFitted = charsFitted;
}
}
public override void Draw()
{
this.DrawOnePage();
}
private bool Draw(DrawText p_drawText, string p_text)
{
DrawText drawText = new DrawText(p_text);
this.StartChar = DrawText.intCurrentCharIndex;
DrawText.intCurrentCharIndex += this.CharsFitted;
bool result;
if (DrawText.intCurrentCharIndex < p_text.Length)
{
result = true;
}
else
{
DrawText.intCurrentCharIndex = 0;
result = false;
}
return result;
}
}
}