mirror of
https://github.com/jie65535/CodeMatrix.git
synced 2025-07-31 18:19:13 +08:00
增加 代码队列显示逻辑
This commit is contained in:
parent
d4d5f586f1
commit
c985adacc5
@ -20,6 +20,10 @@ namespace CodeMatrix
|
|||||||
|
|
||||||
var codeMatrix = new UCCodeMatrix();
|
var codeMatrix = new UCCodeMatrix();
|
||||||
var codeQueue = new UCCodeQueue();
|
var codeQueue = new UCCodeQueue();
|
||||||
|
|
||||||
|
codeMatrix.HoverValueChangedEvent += (_, value) => codeQueue.HoverCode = value;
|
||||||
|
codeMatrix.CodeSelectedEvent += (_, value) => codeQueue.InputCode(value);
|
||||||
|
|
||||||
codeQueue.Location = new Point(codeMatrix.Size.Width, 0);
|
codeQueue.Location = new Point(codeMatrix.Size.Width, 0);
|
||||||
Controls.Add(codeMatrix);
|
Controls.Add(codeMatrix);
|
||||||
Controls.Add(codeQueue);
|
Controls.Add(codeQueue);
|
||||||
|
@ -15,8 +15,22 @@ namespace CodeMatrix
|
|||||||
public byte[,] Matrix { get; set; }
|
public byte[,] Matrix { get; set; }
|
||||||
public Point SelectPoint { get; private set; }
|
public Point SelectPoint { get; private set; }
|
||||||
public Point CursorPoint { get; private set; }
|
public Point CursorPoint { get; private set; }
|
||||||
public Point HoverPoint { get; private set; }
|
private Point _HoverPoint;
|
||||||
|
public Point HoverPoint
|
||||||
|
{
|
||||||
|
get => _HoverPoint;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_HoverPoint = value;
|
||||||
|
if (HoverPoint.X >= 0)
|
||||||
|
HoverValueChangedEvent?.Invoke(this, Matrix[HoverPoint.X, HoverPoint.Y]);
|
||||||
|
else
|
||||||
|
HoverValueChangedEvent?.Invoke(this, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
public RectangleF CodeMatrixRect { get; private set; }
|
public RectangleF CodeMatrixRect { get; private set; }
|
||||||
|
public event EventHandler<byte> HoverValueChangedEvent;
|
||||||
|
public event EventHandler<byte> CodeSelectedEvent;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 方向
|
/// 方向
|
||||||
@ -179,7 +193,6 @@ namespace CodeMatrix
|
|||||||
HoverPoint = hoverPoint;
|
HoverPoint = hoverPoint;
|
||||||
Invalidate();
|
Invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -199,11 +212,11 @@ namespace CodeMatrix
|
|||||||
{
|
{
|
||||||
SelectPoint = HoverPoint;
|
SelectPoint = HoverPoint;
|
||||||
HoverPoint = new Point(-1, -1);
|
HoverPoint = new Point(-1, -1);
|
||||||
Matrix[SelectPoint.X, SelectPoint.Y] = 0;
|
|
||||||
_currDir = _currDir == Directions.Horizontal ? Directions.Vertical : Directions.Horizontal;
|
_currDir = _currDir == Directions.Horizontal ? Directions.Vertical : Directions.Horizontal;
|
||||||
|
CodeSelectedEvent?.Invoke(this, Matrix[SelectPoint.X, SelectPoint.Y]);
|
||||||
|
Matrix[SelectPoint.X, SelectPoint.Y] = 0;
|
||||||
Invalidate();
|
Invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
base.OnMouseClick(e);
|
base.OnMouseClick(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,16 @@ namespace CodeMatrix
|
|||||||
{
|
{
|
||||||
public Size CellSize { get; private set; }
|
public Size CellSize { get; private set; }
|
||||||
public Padding CellMargin { get; set; }
|
public Padding CellMargin { get; set; }
|
||||||
public byte HoverCode { get; set; }
|
private byte _HoverCode;
|
||||||
|
public byte HoverCode
|
||||||
|
{
|
||||||
|
get => _HoverCode;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_HoverCode = value;
|
||||||
|
Invalidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
public int BufferSize { get; set; }
|
public int BufferSize { get; set; }
|
||||||
public int CurrIndex { get; private set; }
|
public int CurrIndex { get; private set; }
|
||||||
public byte[] Buffer { get; } = new byte[32];
|
public byte[] Buffer { get; } = new byte[32];
|
||||||
@ -28,12 +37,8 @@ namespace CodeMatrix
|
|||||||
CellSize = new Size(25, 25);
|
CellSize = new Size(25, 25);
|
||||||
BufferSize = 7;
|
BufferSize = 7;
|
||||||
|
|
||||||
CurrIndex = 4;
|
CurrIndex = 0;
|
||||||
HoverCode = 0x55;
|
HoverCode = 0;
|
||||||
Buffer[0] = 0xE9;
|
|
||||||
Buffer[1] = 0x55;
|
|
||||||
Buffer[2] = 0x1C;
|
|
||||||
Buffer[3] = 0xBD;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void InitComponent()
|
private void InitComponent()
|
||||||
@ -57,40 +62,56 @@ namespace CodeMatrix
|
|||||||
CellSize.Width-1,
|
CellSize.Width-1,
|
||||||
CellSize.Height-1);
|
CellSize.Height-1);
|
||||||
var cellOffsetWidth = CellSize.Width + CellMargin.Horizontal;
|
var cellOffsetWidth = CellSize.Width + CellMargin.Horizontal;
|
||||||
int index = 0;
|
for (int i = 0; i < CurrIndex && i < BufferSize; i++)
|
||||||
for (; index < CurrIndex; index++)
|
|
||||||
{
|
{
|
||||||
e.Graphics.DrawRectangle(Styles.Default.SelectedCellBorderPen, cellOffset);
|
e.Graphics.DrawRectangle(Styles.Default.SelectedCellBorderPen, cellOffset);
|
||||||
var code = Buffer[index].ToString("X2");
|
var code = Buffer[i].ToString("X2");
|
||||||
var codeSize = e.Graphics.MeasureString(code, Font);
|
var codeSize = e.Graphics.MeasureString(code, Font);
|
||||||
var codeOffset = new PointF((CellSize.Width-codeSize.Width)/2, (CellSize.Height-codeSize.Height)/2);
|
var codeOffset = new PointF((CellSize.Width-codeSize.Width)/2, (CellSize.Height-codeSize.Height)/2);
|
||||||
var codePoint = new PointF(codeOffset.X+cellOffset.X, codeOffset.Y+cellOffset.Y);
|
var codePoint = new PointF(codeOffset.X+cellOffset.X, codeOffset.Y+cellOffset.Y);
|
||||||
e.Graphics.DrawString(code, Font, Styles.Default.CodeBrush, codePoint);
|
e.Graphics.DrawString(code, Font, Styles.Default.CodeBrush, codePoint);
|
||||||
cellOffset.X += cellOffsetWidth;
|
cellOffset.X += cellOffsetWidth;
|
||||||
}
|
}
|
||||||
if (HoverCode > 0)
|
|
||||||
|
if (CurrIndex < BufferSize)
|
||||||
{
|
{
|
||||||
e.Graphics.DrawRectangle(Styles.Default.SelectCellBorderPen, cellOffset);
|
e.Graphics.DrawRectangle(Styles.Default.SelectCellBorderPen, cellOffset);
|
||||||
|
if (HoverCode > 0)
|
||||||
|
{
|
||||||
var code = HoverCode.ToString("X2");
|
var code = HoverCode.ToString("X2");
|
||||||
var codeSize = e.Graphics.MeasureString(code, Font);
|
var codeSize = e.Graphics.MeasureString(code, Font);
|
||||||
var codeOffset = new PointF((CellSize.Width-codeSize.Width)/2, (CellSize.Height-codeSize.Height)/2);
|
var codeOffset = new PointF((CellSize.Width-codeSize.Width)/2, (CellSize.Height-codeSize.Height)/2);
|
||||||
var codePoint = new PointF(codeOffset.X+cellOffset.X, codeOffset.Y+cellOffset.Y);
|
var codePoint = new PointF(codeOffset.X+cellOffset.X, codeOffset.Y+cellOffset.Y);
|
||||||
e.Graphics.DrawString(code, Font, Styles.Default.SelectBrush, codePoint);
|
e.Graphics.DrawString(code, Font, Styles.Default.SelectBrush, codePoint);
|
||||||
|
|
||||||
|
|
||||||
cellOffset.X += cellOffsetWidth;
|
|
||||||
index++;
|
|
||||||
}
|
}
|
||||||
for (; index < BufferSize; index++)
|
cellOffset.X += cellOffsetWidth;
|
||||||
|
|
||||||
|
for (int i = CurrIndex+1; i < BufferSize; i++)
|
||||||
{
|
{
|
||||||
e.Graphics.DrawRectangle(Styles.Default.EmptyCellBorderPen, cellOffset);
|
e.Graphics.DrawRectangle(Styles.Default.EmptyCellBorderPen, cellOffset);
|
||||||
cellOffset.X += cellOffsetWidth;
|
cellOffset.X += cellOffsetWidth;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
e.Graphics.DrawRectangle(Styles.Default.DefaultBorderPen, 0, 0, Width - 1, Height - 1);
|
e.Graphics.DrawRectangle(Styles.Default.DefaultBorderPen, 0, 0, Width - 1, Height - 1);
|
||||||
|
|
||||||
base.OnPaint(e);
|
base.OnPaint(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void InputCode(byte code)
|
||||||
|
{
|
||||||
|
if (CurrIndex < BufferSize)
|
||||||
|
{
|
||||||
|
Buffer[CurrIndex++] = code;
|
||||||
|
HoverCode = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ClearBuffer()
|
||||||
|
{
|
||||||
|
CurrIndex = 0;
|
||||||
|
HoverCode = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user