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 codeQueue = new UCCodeQueue();
|
||||
|
||||
codeMatrix.HoverValueChangedEvent += (_, value) => codeQueue.HoverCode = value;
|
||||
codeMatrix.CodeSelectedEvent += (_, value) => codeQueue.InputCode(value);
|
||||
|
||||
codeQueue.Location = new Point(codeMatrix.Size.Width, 0);
|
||||
Controls.Add(codeMatrix);
|
||||
Controls.Add(codeQueue);
|
||||
|
@ -15,8 +15,22 @@ namespace CodeMatrix
|
||||
public byte[,] Matrix { get; set; }
|
||||
public Point SelectPoint { 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 event EventHandler<byte> HoverValueChangedEvent;
|
||||
public event EventHandler<byte> CodeSelectedEvent;
|
||||
|
||||
/// <summary>
|
||||
/// 方向
|
||||
@ -179,7 +193,6 @@ namespace CodeMatrix
|
||||
HoverPoint = hoverPoint;
|
||||
Invalidate();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -199,11 +212,11 @@ namespace CodeMatrix
|
||||
{
|
||||
SelectPoint = HoverPoint;
|
||||
HoverPoint = new Point(-1, -1);
|
||||
Matrix[SelectPoint.X, SelectPoint.Y] = 0;
|
||||
_currDir = _currDir == Directions.Horizontal ? Directions.Vertical : Directions.Horizontal;
|
||||
CodeSelectedEvent?.Invoke(this, Matrix[SelectPoint.X, SelectPoint.Y]);
|
||||
Matrix[SelectPoint.X, SelectPoint.Y] = 0;
|
||||
Invalidate();
|
||||
}
|
||||
|
||||
base.OnMouseClick(e);
|
||||
}
|
||||
}
|
||||
|
@ -12,7 +12,16 @@ namespace CodeMatrix
|
||||
{
|
||||
public Size CellSize { get; private 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 CurrIndex { get; private set; }
|
||||
public byte[] Buffer { get; } = new byte[32];
|
||||
@ -28,12 +37,8 @@ namespace CodeMatrix
|
||||
CellSize = new Size(25, 25);
|
||||
BufferSize = 7;
|
||||
|
||||
CurrIndex = 4;
|
||||
HoverCode = 0x55;
|
||||
Buffer[0] = 0xE9;
|
||||
Buffer[1] = 0x55;
|
||||
Buffer[2] = 0x1C;
|
||||
Buffer[3] = 0xBD;
|
||||
CurrIndex = 0;
|
||||
HoverCode = 0;
|
||||
}
|
||||
|
||||
private void InitComponent()
|
||||
@ -57,34 +62,35 @@ namespace CodeMatrix
|
||||
CellSize.Width-1,
|
||||
CellSize.Height-1);
|
||||
var cellOffsetWidth = CellSize.Width + CellMargin.Horizontal;
|
||||
int index = 0;
|
||||
for (; index < CurrIndex; index++)
|
||||
for (int i = 0; i < CurrIndex && i < BufferSize; i++)
|
||||
{
|
||||
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 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);
|
||||
e.Graphics.DrawString(code, Font, Styles.Default.CodeBrush, codePoint);
|
||||
cellOffset.X += cellOffsetWidth;
|
||||
}
|
||||
if (HoverCode > 0)
|
||||
|
||||
if (CurrIndex < BufferSize)
|
||||
{
|
||||
e.Graphics.DrawRectangle(Styles.Default.SelectCellBorderPen, cellOffset);
|
||||
var code = HoverCode.ToString("X2");
|
||||
var codeSize = e.Graphics.MeasureString(code, Font);
|
||||
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);
|
||||
e.Graphics.DrawString(code, Font, Styles.Default.SelectBrush, codePoint);
|
||||
|
||||
|
||||
cellOffset.X += cellOffsetWidth;
|
||||
index++;
|
||||
}
|
||||
for (; index < BufferSize; index++)
|
||||
{
|
||||
e.Graphics.DrawRectangle(Styles.Default.EmptyCellBorderPen, cellOffset);
|
||||
if (HoverCode > 0)
|
||||
{
|
||||
var code = HoverCode.ToString("X2");
|
||||
var codeSize = e.Graphics.MeasureString(code, Font);
|
||||
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);
|
||||
e.Graphics.DrawString(code, Font, Styles.Default.SelectBrush, codePoint);
|
||||
}
|
||||
cellOffset.X += cellOffsetWidth;
|
||||
|
||||
for (int i = CurrIndex+1; i < BufferSize; i++)
|
||||
{
|
||||
e.Graphics.DrawRectangle(Styles.Default.EmptyCellBorderPen, cellOffset);
|
||||
cellOffset.X += cellOffsetWidth;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -92,5 +98,20 @@ namespace CodeMatrix
|
||||
|
||||
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