- UIControl 프로젝트 구조 변경 (CapCleaningControl → Sub/UIControl) - arAjinextek 라이브러리 통합 및 구조 개선 - 새로운 arAjinextek_Union 프로젝트 추가 - 솔루션 파일에 README.md 추가 - QR 모드에서 WMS RCV 태그 인식 기능 강화 - 데이터베이스 스키마 업데이트 및 관련 클래스 수정 - 프린터 및 바코드 장치 연동 로직 개선 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
169 lines
7.3 KiB
C#
169 lines
7.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
|
|
namespace UIControl
|
|
{
|
|
public static class Utility
|
|
{
|
|
|
|
public static Rectangle OffsetRect(this Rectangle rect, int x,int y)
|
|
{
|
|
var retval = new Rectangle(rect.X + x, rect.Y + y, rect.Width, rect.Height);
|
|
return retval;
|
|
}
|
|
|
|
public static void DrawString(this Graphics g,
|
|
string msg,
|
|
Font font,
|
|
Color fcolor,
|
|
RectangleF rect,
|
|
ContentAlignment textalign = ContentAlignment.MiddleCenter,
|
|
Color? ShadowColor = null,
|
|
Brush BackBrush = null,
|
|
Pen BorderPen = null)
|
|
{
|
|
DrawString(g, msg, font, fcolor, rect.toRect(), textalign, ShadowColor, BackBrush, BorderPen);
|
|
}
|
|
|
|
public static void DrawRectangle(this Graphics g, Pen pen, RectangleF rect)
|
|
{
|
|
g.DrawRectangle(pen, rect.Left, rect.Top, rect.Width, rect.Height);
|
|
}
|
|
|
|
public static void DrawString(this Graphics g,
|
|
string msg,
|
|
Font font,
|
|
Color fcolor,
|
|
Rectangle rect,
|
|
ContentAlignment textalign = ContentAlignment.MiddleCenter,
|
|
Color? ShadowColor = null,
|
|
Brush BackBrush = null,
|
|
Pen BorderPen = null)
|
|
{
|
|
//배경색 지정되어 있다면
|
|
if (BackBrush != null) g.FillRectangle(BackBrush, rect);
|
|
|
|
//테두리 지정되어 있다면
|
|
if (BorderPen != null) g.DrawRectangle(BorderPen, rect);
|
|
|
|
//그립자가 지정되있다면 별도 처리를 한다
|
|
if (ShadowColor != null && ShadowColor != Color.Transparent)
|
|
{
|
|
SizeF fsize;
|
|
var drawPT = GetTextPosition(g, msg, font, rect, textalign, out fsize);
|
|
|
|
//그림자를 먼저 그린다
|
|
g.DrawString(msg, font, new SolidBrush((Color)ShadowColor), drawPT.X + 1, drawPT.Y + 1);
|
|
g.DrawString(msg, font, new SolidBrush(fcolor), drawPT.X, drawPT.Y);
|
|
}
|
|
else
|
|
{
|
|
var sf = new StringFormat();
|
|
|
|
if (textalign == ContentAlignment.BottomCenter) { sf.Alignment = StringAlignment.Center; sf.LineAlignment = StringAlignment.Near; }
|
|
else if (textalign == ContentAlignment.BottomLeft) { sf.Alignment = StringAlignment.Near; sf.LineAlignment = StringAlignment.Near; }
|
|
else if (textalign == ContentAlignment.BottomRight) { sf.Alignment = StringAlignment.Far; sf.LineAlignment = StringAlignment.Near; }
|
|
else if (textalign == ContentAlignment.MiddleCenter) { sf.Alignment = StringAlignment.Center; sf.LineAlignment = StringAlignment.Center; }
|
|
else if (textalign == ContentAlignment.MiddleLeft) { sf.Alignment = StringAlignment.Near; sf.LineAlignment = StringAlignment.Center; }
|
|
else if (textalign == ContentAlignment.MiddleRight) { sf.Alignment = StringAlignment.Far; sf.LineAlignment = StringAlignment.Center; }
|
|
else if (textalign == ContentAlignment.TopCenter) { sf.Alignment = StringAlignment.Center; sf.LineAlignment = StringAlignment.Far; }
|
|
else if (textalign == ContentAlignment.TopLeft) { sf.Alignment = StringAlignment.Near; sf.LineAlignment = StringAlignment.Far; }
|
|
else if (textalign == ContentAlignment.TopRight) { sf.Alignment = StringAlignment.Far; sf.LineAlignment = StringAlignment.Far; }
|
|
else { sf.Alignment = StringAlignment.Center; sf.LineAlignment = StringAlignment.Center; }
|
|
|
|
|
|
g.DrawString(msg, font, new SolidBrush(fcolor), rect, sf);
|
|
|
|
sf.Dispose();
|
|
}
|
|
}
|
|
|
|
public static void DrawRect(this Graphics g, Rectangle rect, Color color, Color shadowColor, int pensize = 1)
|
|
{
|
|
//우측하단에 선을 그려준다. 일단은 검은색
|
|
g.DrawLine(new Pen(shadowColor, pensize), rect.Left + 1, rect.Bottom + 1, rect.Right - 1, rect.Bottom + 1);
|
|
g.DrawLine(new Pen(shadowColor, pensize), rect.Right + 1, rect.Top + 1, rect.Right + 1, rect.Bottom - 1);
|
|
DrawRect(g, rect, color, pensize);
|
|
}
|
|
public static void DrawRect(this Graphics g, Rectangle rect, Color color, int pensize = 1)
|
|
{
|
|
g.DrawRectangle(new Pen(color, pensize), rect);
|
|
}
|
|
|
|
public static void DrawRect(this Graphics g, RectangleF rect, Color color, int pensize = 1, Boolean shadow = false)
|
|
{
|
|
g.DrawRectangle(new Pen(color, pensize), rect.Left, rect.Top, rect.Width, rect.Height);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Rectangle 개체를 반환 합니다. 단순 float -> int 로 값을 변환 합니다.
|
|
/// </summary>
|
|
/// <param name="rect"></param>
|
|
/// <returns></returns>
|
|
public static Rectangle toRect(this RectangleF rect)
|
|
{
|
|
return new Rectangle((int)rect.Left, (int)rect.Top, (int)rect.Width, (int)rect.Height); ;
|
|
}
|
|
|
|
static PointF GetTextPosition(Graphics g, string data, Font f, Rectangle rect, ContentAlignment align, System.Windows.Forms.Padding Padding, out SizeF fsize)
|
|
{
|
|
float x = 0;
|
|
float y = 0;
|
|
fsize = g.MeasureString(data, f);
|
|
if (align == ContentAlignment.MiddleCenter)
|
|
{
|
|
x = (rect.Width - fsize.Width) / 2 + Padding.Left - Padding.Right;
|
|
y = (rect.Height - fsize.Height) / 2 + Padding.Top - Padding.Bottom;
|
|
}
|
|
else if (align == ContentAlignment.MiddleLeft)
|
|
{
|
|
x = Padding.Left;
|
|
y = (rect.Height - fsize.Height) / 2;
|
|
}
|
|
else if (align == ContentAlignment.MiddleRight)
|
|
{
|
|
x = rect.Width - fsize.Width - Padding.Right;
|
|
y = (rect.Height - fsize.Height) / 2;
|
|
}
|
|
else if (align == ContentAlignment.BottomLeft)
|
|
{
|
|
x = Padding.Left;
|
|
y = rect.Height - fsize.Height - Padding.Bottom;
|
|
}
|
|
else if (align == ContentAlignment.BottomRight)
|
|
{
|
|
x = rect.Width - fsize.Width - Padding.Right;
|
|
y = rect.Height - fsize.Height - Padding.Bottom;
|
|
}
|
|
else if (align == ContentAlignment.BottomCenter)
|
|
{
|
|
x = (rect.Width - fsize.Width) / 2;
|
|
y = rect.Height - fsize.Height - Padding.Bottom;
|
|
}
|
|
else if (align == ContentAlignment.TopLeft)
|
|
{
|
|
x = Padding.Left;
|
|
y = Padding.Top;
|
|
}
|
|
else if (align == ContentAlignment.TopRight)
|
|
{
|
|
x = rect.Width - fsize.Width - Padding.Right;
|
|
y = Padding.Top;
|
|
}
|
|
else if (align == ContentAlignment.TopCenter)
|
|
{
|
|
x = (rect.Width - fsize.Width) / 2;
|
|
y = Padding.Top;
|
|
}
|
|
return new PointF(x + rect.Left, y + rect.Top);
|
|
}
|
|
static PointF GetTextPosition(Graphics g, string data, Font f, Rectangle rect, ContentAlignment align, out SizeF fsize)
|
|
{
|
|
return GetTextPosition(g, data, f, rect, align, new System.Windows.Forms.Padding(0), out fsize);
|
|
}
|
|
}
|
|
}
|