From 1a1c8e71fcd14858f595029f089b2d4a00202b32 Mon Sep 17 00:00:00 2001
From: ogi <Administrator@S-OGI-PC>
Date: Fri, 05 Dec 2025 09:24:16 +0900
Subject: [PATCH] プロジェクトファイルを追加。

---
 HotelPms.Share.Windows/Component/Design/DesignItem.cs |  396 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 396 insertions(+), 0 deletions(-)

diff --git a/HotelPms.Share.Windows/Component/Design/DesignItem.cs b/HotelPms.Share.Windows/Component/Design/DesignItem.cs
new file mode 100644
index 0000000..440baf6
--- /dev/null
+++ b/HotelPms.Share.Windows/Component/Design/DesignItem.cs
@@ -0,0 +1,396 @@
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+using System.Drawing.Imaging;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HotelPms.Share.Windows.Component.Design
+{
+    public class DesignItem
+    {
+        public Rectangle[] SmallRect = new Rectangle[8];
+        public Rectangle[] BoundRect = new Rectangle[4];
+
+        public static Size Square = new Size(7, 7);
+        //private StringFormat m_StringFormat = new StringFormat(StringFormatFlags.NoWrap);
+
+        private DesignPanel.ItemType m_Appearance = DesignPanel.ItemType.Normal;
+
+        /// <summary>
+        /// 外観
+        /// </summary>
+        public DesignPanel.ItemType Appearance
+        {
+            get { return m_Appearance; }
+            set { m_Appearance = value; }
+        }
+
+        private bool m_DesignMode = false;
+
+        public bool DesignMode
+        {
+            get { return m_DesignMode; }
+            set { m_DesignMode = value; }
+        }
+
+        private string m_ImageFile = string.Empty;
+
+        public string ImageFile
+        {
+            get { return m_ImageFile; }
+            set { m_ImageFile = value; }
+        }
+
+        private string m_Text = string.Empty;
+
+        public string Text
+        {
+            get { return m_Text; }
+            set { m_Text = value; }
+        }
+
+        private float m_LineWidth = 1.0F;
+
+        public float LineWidth
+        {
+            get { return m_LineWidth; }
+            set { m_LineWidth = value; }
+        }
+
+        private Font m_Font = SystemFonts.MenuFont;
+        public Font Font
+        {
+            get { return m_Font; }
+            set { m_Font = value; }
+        }
+
+        public int X1
+        {
+            get { return m_ClientRectangle.X; }
+            set { m_ClientRectangle = new Rectangle(new Point(value, m_ClientRectangle.Y), m_ClientRectangle.Size); }
+        }
+
+        public int Y1
+        {
+            get { return m_ClientRectangle.Y; }
+            set { m_ClientRectangle = new Rectangle(new Point(m_ClientRectangle.X, value), m_ClientRectangle.Size); }
+        }
+
+        public int X2
+        {
+            get { return m_ClientRectangle.X + m_ClientRectangle.Width; }
+            set { m_ClientRectangle = new Rectangle(m_ClientRectangle.Location, new Size(value - m_ClientRectangle.X, m_ClientRectangle.Height)); }
+        }
+
+        public int Y2
+        {
+            get { return m_ClientRectangle.Y + m_ClientRectangle.Height; }
+            set { m_ClientRectangle = new Rectangle(m_ClientRectangle.Location, new Size(m_ClientRectangle.Width, value - m_ClientRectangle.Y)); }
+        }
+
+        private Rectangle m_ClientRectangle = new Rectangle(0, 0, 100, 100);
+
+        public Rectangle ClientRectangle
+        {
+            get { return m_ClientRectangle; }
+            set { m_ClientRectangle = value; }
+        }
+
+        private Color m_BackColor = Color.White;
+
+        public Color BackColor
+        {
+            get { return m_BackColor; }
+            set { m_BackColor = value; }
+        }
+
+        private Color m_BackGradientColor = Color.Empty;
+
+        public Color BackGradientColor
+        {
+            get { return m_BackGradientColor; }
+            set { m_BackGradientColor = value; }
+        }
+
+        private LinearGradientMode m_BackGradientMode = LinearGradientMode.Horizontal;
+
+        public LinearGradientMode BackGradientMode
+        {
+            get { return m_BackGradientMode; }
+            set { m_BackGradientMode = value; }
+        }
+
+
+        private Color m_ForeColor = Color.Black;
+
+        public Color ForeColor
+        {
+            get { return m_ForeColor; }
+            set { m_ForeColor = value; }
+        }
+
+        private TextFormatFlags m_LineAlignment = TextFormatFlags.VerticalCenter;
+
+        /// <summary>
+        /// 縦
+        /// </summary>
+        public TextFormatFlags LineAlignment
+        {
+            get { return m_LineAlignment; }
+            set { m_LineAlignment = value; }
+        }
+
+        private TextFormatFlags m_Alignment = TextFormatFlags.Left;
+
+        /// <summary>
+        /// 水平
+        /// </summary>
+        public TextFormatFlags Alignment
+        {
+            get { return m_Alignment; }
+            set { m_Alignment = value; }
+        }
+
+        public bool EnabledBorder { get; set; } = false;
+
+        public string Name { get; set; } = string.Empty;
+
+        public object Tag { get; set; } = null;
+
+        public void Draw(Graphics g)
+        {
+            FillCell(g);
+            DrawCellImage(g); //画像
+            DrawCellText(g);  //文字
+        }
+
+        private void DrawCellImage(Graphics g)
+        {
+            try
+            {
+                if (m_Appearance == DesignPanel.ItemType.Line) { return; }
+                if (m_ImageFile.Length == 0) { return; }
+                if (!File.Exists(m_ImageFile)) { return; }
+                Bitmap img = Image.FromFile(m_ImageFile) as Bitmap;
+                using (ImageAttributes vAttr = new ImageAttributes())
+                {
+                    vAttr.SetColorKey(img.GetPixel(0, 0), img.GetPixel(0, 0));
+                    g.DrawImage(img, m_ClientRectangle, 0, 0, img.Width, img.Height, GraphicsUnit.Pixel, vAttr);
+                }
+            }
+            catch { }
+        }
+
+        private Font GetScaleFont(Font orgFont, Graphics g)
+        {
+            return new Font(orgFont.FontFamily, orgFont.Size * g.Transform.Elements[0], orgFont.Style);
+        }
+
+        private void DrawCellText(Graphics g)
+        {
+            bool newflag = m_ForeColor.IsSystemColor;
+            Color brushColor = m_ForeColor;
+
+            if (m_Appearance == DesignPanel.ItemType.Normal)
+            {
+                if (g.Transform.Elements[0] == 1F)
+                {
+                    TextRenderer.DrawText(g, m_Text, m_Font, m_ClientRectangle, m_ForeColor, m_Alignment | m_LineAlignment);
+                }
+                else
+                {
+                    using (Font newFont = GetScaleFont(m_Font, g))
+                    {
+                        float scale = g.Transform.Elements[0];
+                        TextRenderer.DrawText(g, m_Text, newFont, new Rectangle((int)(m_ClientRectangle.X * scale), (int)(m_ClientRectangle.Y * scale), (int)(m_ClientRectangle.Width * scale), (int)(m_ClientRectangle.Height * scale)), m_ForeColor, m_Alignment | m_LineAlignment);
+                    }
+                }
+            }
+            else
+            {
+                Pen pen = newflag ? SystemPens.FromSystemColor(brushColor) : new Pen(brushColor);
+                pen.Width = m_LineWidth;
+                SmoothingMode sm = g.SmoothingMode;
+                g.SmoothingMode = SmoothingMode.AntiAlias;
+                g.DrawLine(pen, new Point(X1, Y1), new Point(X2, Y2));
+                g.SmoothingMode = sm;
+                if (!newflag) { pen.Dispose(); }
+            }
+
+            
+        }
+
+        private void FillCell(Graphics g)
+        {
+            if (m_Appearance == DesignPanel.ItemType.Normal)
+            {
+                if (m_BackColor.Equals(Color.Empty) || m_BackColor.Equals(Color.Transparent)) { return; }
+
+                Color bColorMax = m_BackColor;
+                Color bColorMin = m_BackGradientColor;
+                if (m_BackGradientColor.Equals(Color.Empty))
+                {
+                    bool newflag = bColorMax.IsSystemColor;
+                    SolidBrush brush = newflag ? SystemBrushes.FromSystemColor(bColorMax) as SolidBrush : new SolidBrush(bColorMax);
+                    g.FillRectangle(brush, m_ClientRectangle);
+                    if (!newflag) { brush.Dispose(); }
+                }
+                else
+                {
+                    using (LinearGradientBrush lgBrush = new LinearGradientBrush(m_ClientRectangle, bColorMax, bColorMin, m_BackGradientMode)) { g.FillRectangle(lgBrush, m_ClientRectangle); }
+                }
+
+                if (EnabledBorder) { ControlPaint.DrawVisualStyleBorder(g, m_ClientRectangle); }
+            }
+
+            //ControlPaint.DrawBorder(g, m_ClientRectangle,
+            //                         Color.DimGray, 1, ButtonBorderStyle.Solid, //左边
+            //                         Color.DimGray, 1, ButtonBorderStyle.Solid, //上边
+            //                         Color.White, 1, ButtonBorderStyle.Solid, //右边
+            //                         Color.White, 1, ButtonBorderStyle.Solid);//底边
+
+            //その部分
+            if (!m_DesignMode) { return; }
+            DrawDesignFrame(g);
+
+            //if (isFocus && m_IsMouseDown)
+            //{
+            //ControlPaint.DrawBorder(e.Graphics, r,
+            //                         Color.DimGray, 1, ButtonBorderStyle.Solid, //左边
+            //                         Color.DimGray, 1, ButtonBorderStyle.Solid, //上边
+            //                         Color.White, 1, ButtonBorderStyle.Solid, //右边
+            //                         Color.White, 1, ButtonBorderStyle.Solid);//底边
+            //}
+        }
+
+        /// <summary>
+        /// 6個点
+        /// </summary>
+        /// <returns></returns>
+        private Rectangle[] CreateDesignSmallRect()
+        {
+            Rectangle[] SmallRect = new Rectangle[8];
+            if (m_Appearance == DesignPanel.ItemType.Line && X1 == X2)
+            {
+                #region 縦線 (※X1は線の中心のX)
+
+                SmallRect[0] = Rectangle.Empty;  //上左               
+                SmallRect[1] = new Rectangle(new Point(X1 - Square.Width / 2, Y1 - Square.Height), Square); //上中間                    
+                SmallRect[2] = Rectangle.Empty;  //上右               
+                SmallRect[3] = Rectangle.Empty;  //中間左               
+                SmallRect[4] = Rectangle.Empty;  //中間右
+                SmallRect[5] = Rectangle.Empty;  //下左
+                SmallRect[6] = new Rectangle(new Point(X1 - Square.Width / 2, Y2), Square); //下中間                
+                SmallRect[7] = Rectangle.Empty;  //下右
+
+                #endregion
+            }
+            else if (m_Appearance == DesignPanel.ItemType.Line && Y1 == Y2)
+            {
+                #region 横線 (※Y1は線の中心のY)
+
+                SmallRect[0] = Rectangle.Empty;  //上左               
+                SmallRect[1] = Rectangle.Empty; //上中間       
+                SmallRect[2] = Rectangle.Empty;  //上右                               
+                SmallRect[3] = new Rectangle(new Point(X1 - Square.Width, Y1 - Square.Height/ 2), Square); //中間左                    
+                SmallRect[4] = new Rectangle(new Point(X2, Y1 - Square.Height / 2), Square); //中間右                    
+                SmallRect[5] = Rectangle.Empty;  //下左
+                SmallRect[6] = Rectangle.Empty;  //下中間
+                SmallRect[7] = Rectangle.Empty;  //下右
+
+                #endregion
+            }
+            else
+            {
+                SmallRect[0] = new Rectangle(new Point(m_ClientRectangle.X - Square.Width, m_ClientRectangle.Y - Square.Height), Square);  //上左
+                SmallRect[1] = new Rectangle(new Point(m_ClientRectangle.X + (m_ClientRectangle.Width - Square.Width) / 2, m_ClientRectangle.Y - Square.Height), Square); //上中間
+                SmallRect[2] = new Rectangle(new Point(m_ClientRectangle.X + m_ClientRectangle.Width, m_ClientRectangle.Y - Square.Height), Square);  //上右
+                SmallRect[3] = new Rectangle(new Point(m_ClientRectangle.X - Square.Width, m_ClientRectangle.Y + (m_ClientRectangle.Height - Square.Height) / 2), Square);  //中間左
+                SmallRect[4] = new Rectangle(new Point(m_ClientRectangle.X + m_ClientRectangle.Width, m_ClientRectangle.Y + (m_ClientRectangle.Height - Square.Height) / 2), Square);  //中間右
+                SmallRect[5] = new Rectangle(new Point(m_ClientRectangle.X - Square.Width, m_ClientRectangle.Y + m_ClientRectangle.Height), Square);   //下左
+                SmallRect[6] = new Rectangle(new Point(m_ClientRectangle.X + (m_ClientRectangle.Width - Square.Width) / 2, m_ClientRectangle.Y + m_ClientRectangle.Height), Square);  //下中間
+                SmallRect[7] = new Rectangle(new Point(m_ClientRectangle.X + m_ClientRectangle.Width, m_ClientRectangle.Y + m_ClientRectangle.Height), Square);   //下右
+            }
+            return SmallRect;
+        }
+
+        /// <summary>
+        /// 棒
+        /// </summary>
+        /// <returns></returns>
+        private Rectangle[] CreateDesignBoundRect()
+        {
+            int adding = 2;
+            Rectangle[] BoundRect = new Rectangle[4];
+            if (m_Appearance == DesignPanel.ItemType.Line && X1 == X2)
+            {
+                int x = 0;
+                int x1 = 0;
+                int width = 0;
+                if ((int)m_LineWidth < Square.Width)
+                {
+                    x = X1 - Square.Width / 2 - Square.Width;
+                    width = Square.Width * 3;
+                }
+                else
+                {
+                    x = X1 - (int)m_LineWidth / 2 - Square.Width;
+                    width = Square.Width * 2 + (int)m_LineWidth;
+                }
+                x1 = x + width - (Square.Width - adding);
+
+                BoundRect[0] = new Rectangle(x, Y1 - Square.Height, width, Square.Height);  //上
+                BoundRect[1] = new Rectangle(x, Y1, Square.Width - adding, Y2 - Y1);  //左
+                BoundRect[2] = new Rectangle(x, Y2, width, Square.Height);  //下
+                BoundRect[3] = new Rectangle(x1, Y1, Square.Width - adding, Y2 - Y1);  //右
+            }
+            else if (m_Appearance == DesignPanel.ItemType.Line && Y1 == Y2)
+            {
+                int y = 0;
+                int y1 = 0;
+                int height = 0;
+                if ((int)m_LineWidth < Square.Height)
+                {
+                    y = Y1 - Square.Height / 2 - Square.Height;
+                    height = Square.Height * 3;
+                }
+                else
+                {
+                    y = Y1 - (int)m_LineWidth / 2 - Square.Height;
+                    height = Square.Height * 2 + (int)m_LineWidth;
+                }
+                y1 = y + height - (Square.Height - adding);
+
+                BoundRect[0] = new Rectangle(X1, y, X2 - X1, Square.Height - adding);  //上
+                BoundRect[1] = new Rectangle(X1 - Square.Width, y, Square.Width, height);  //左
+                BoundRect[2] = new Rectangle(X1, y1, X2 - X1, Square.Height - adding);  //下
+                BoundRect[3] = new Rectangle(X2, y, Square.Width, height);  //右
+            }
+            else
+            {
+                BoundRect[0] = new Rectangle(m_ClientRectangle.X, m_ClientRectangle.Y - Square.Height, m_ClientRectangle.Width, Square.Height - adding);  //上
+                BoundRect[1] = new Rectangle(m_ClientRectangle.X - Square.Width, m_ClientRectangle.Y, Square.Width - adding, m_ClientRectangle.Height);  //左
+                BoundRect[2] = new Rectangle(m_ClientRectangle.X, m_ClientRectangle.Y + m_ClientRectangle.Height + adding + 1, m_ClientRectangle.Width, Square.Height - adding);  //下
+                BoundRect[3] = new Rectangle(m_ClientRectangle.X + m_ClientRectangle.Width + adding + 1, m_ClientRectangle.Y, Square.Width - adding, m_ClientRectangle.Height);  //右
+            }
+            return BoundRect;
+        }
+
+        private void DrawDesignFrame(Graphics g)
+        {
+            try
+            {
+                SmallRect = CreateDesignSmallRect();
+                BoundRect = CreateDesignBoundRect();
+                g.FillRectangles(Brushes.LightGray, BoundRect);
+                g.FillRectangles(Brushes.White, SmallRect);
+                g.DrawRectangles(Pens.Black, SmallRect);
+            }
+            catch { }
+        }
+    }
+}

--
Gitblit v1.10.0