123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 |
-
- using DllEapEntity;
- using System;
- using System.Collections.Generic;
- using System.Data;
- using System.Drawing;
- using System.Drawing.Drawing2D;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- namespace DllXqManager
- {
- public class TEntityControl : Label
- {
- public int CurrTime = 0;
- public LayoutDetail CurrEntity = null;
- public MacStatus CurrStatus = null;
- private Color CurrColor = Color.Transparent;//Color.White;
- Color fontcolor = Color.White;
- Image img = null;
- //private Label lable1 = new Label();
- public TEntityControl(LayoutDetail row)
- {
- CurrEntity = row;
- InitializeComponent();
- this.BackColor = Color.Transparent;
- }
- public void SetBackColor(Color color)
- {
- //CurrColor = color;
- //CurrColor = Color.Transparent;
- }
- public void SetFontColor(Color color)
- {
- //CurrColor = color;
- fontcolor = color;
- }
- public void SetImage(Image image)
- {
- //CurrColor = color;
- img = image;
- }
- private void InitControl()
- {
- }
- private Point CurrPoint = new Point(0, 0);
- private void InitializeComponent()
- {
- this.SuspendLayout();
- //
- // TEntityControl
- //
- //this.Text = "666666666";
- this.Paint += new System.Windows.Forms.PaintEventHandler(this.TEntityControl_Paint);
- this.ResumeLayout(false);
- }
- private void TEntityControl_MouseDown(object sender, MouseEventArgs e)
- {
- CurrPoint.X = e.X;
- CurrPoint.Y = e.Y;
- (sender as Control).BringToFront();
- }
- private void TEntityControl_MouseMove(object sender, MouseEventArgs e)
- {
- (sender as Control).Left = (sender as Control).Left + e.X - CurrPoint.X;
- (sender as Control).Top = (sender as Control).Top + e.Y - CurrPoint.Y;
- }
- private void TEntityControl_Enter(object sender, EventArgs e)
- {
- }
- protected override void OnPaint(PaintEventArgs e)
- {
- //base.OnPaint(e); //自己的代码
- //this.Refresh();//不能加此语句,否则一直闪烁
- Graphics g = e.Graphics;
- //string fcode = CurrRow["实体代码"].ToString();
- //g.DrawString(fcode, new Font("arail", 10), new SolidBrush(Color.Black), 5, 5);
- //g.DrawString(CurrRow["实体名称"].ToString(), new Font("arail", 10), new SolidBrush(Color.Black), 5, 30);
- //g.Dispose();
- string fcode = CurrEntity.FCode;// CurrRow["实体代码"].ToString();
- string fname = CurrEntity.FName;// CurrRow["实体名称"].ToString();
- float fontsize = float.Parse(CurrEntity.FontSize.ToString());
- Font tempfont = new Font("arail", fontsize, FontStyle.Bold);
- int entitytype = CurrEntity.EntityTypeID;
- Pen p = new Pen(fontcolor);
- int w = this.Width;
- int h = this.Height;
- SizeF sizeF = g.MeasureString(fcode, tempfont);//获取字符串长和宽,像素单位
- float x = 0;
- //Color fontcolor = Color.Black;
- if (entitytype == 2 || entitytype == 3)
- {
- FillRoundRectangle(g, new Rectangle(0, 0, w - 1, h - 1), CurrColor, 5);
- //fname = CurrEntity.TEntityFTypeFName+" "+ CurrEntity.FCode+ " " + CurrEntity.FName + " " + CurrEntity.Remark;
- fname = CurrEntity.FName;
- //g.DrawRectangle(p, 0, 0, w - 1, h - 1);
- int rowh = h;//行高
- float rowl = (rowh - tempfont.Height) / 2;//子开始的纵坐标
- sizeF = g.MeasureString(fname, tempfont);
- x = (w - sizeF.Width) / 2;
- g.DrawString(fname, tempfont, new SolidBrush(Color.White), x, rowl);
- this.SetBackColor(Color.Violet);
- }
- else if (entitytype == 3)
- {
- //g.DrawRectangle(p, 0, 0, w - 1, h - 1);
- //g.DrawLine(p, 0, h / 3, w, h / 3);
- //g.DrawLine(p, 0, h * 2 / 3, w, h * 2 / 3);
- //int rowh = h / 3;//行高
- //float rowl = (rowh - tempfont.Height) / 2;//子开始的纵坐标
- //fname = CurrEntity.TEntityFTypeFName + " " + CurrEntity.FCode + " " + CurrEntity.FName;
- //sizeF = g.MeasureString(fname, tempfont);
- //x = (w - sizeF.Width) / 2;
- //g.DrawString(fname, tempfont, new SolidBrush(Color.Black), 5, rowl);
- //fname = CurrEntity.FName;
- //sizeF = g.MeasureString(fname, tempfont);
- //x = (w - sizeF.Width) / 2;
- //g.DrawString(fname, tempfont, new SolidBrush(Color.Black), 5, h / 3 + rowl);
- //fname = CurrEntity.Remark;
- //sizeF = g.MeasureString(fname, tempfont);
- //x = (w - sizeF.Width) / 2;
- //g.DrawString(fname, tempfont, new SolidBrush(Color.Black), 5, h / 3 * 2 + rowl);
- }
- else
- {
- DateTime stime = DateTime.Now;
- if (CurrStatus != null)
- {
- stime = CurrStatus.STime;// CurrEntity.RecTime;
- }
- TimeSpan ts1 = new TimeSpan(stime.Ticks);
- TimeSpan ts2 = new TimeSpan(DateTime.Now.Ticks);
- TimeSpan ts = ts1.Subtract(ts2).Duration();
- int tlen = ts.Hours * 3600 + ts.Minutes * 60 + ts.Seconds;
- string showtime = tlen.ToString() + "S";
- if (tlen > 60)
- {
- decimal minute = ts.Hours * 60 + ts.Minutes;
- showtime = minute.ToString() + "M";
- }
- if (this.BackColor == Color.Gray)
- {
- fontcolor = Color.White;
- p.Color = Color.White;
- }
- //g.DrawRectangle(p, 0, 0, w - 1, h - 1);
- FillRoundRectangle(g, new Rectangle(0, 0, w - 1, h - 1), CurrColor, 5);
- //g.DrawLine(p, 0, h , w, h );//三分之一处画条横线
- //g.DrawLine(p, 0, 0, w, 0);//三分之一处画条横线
- //g.DrawLine(p, w - w / 3, 0, w - w / 3, h / 3);//第一行得三分之二处画竖线
- float y = 0;
- //显示机种信息(状态的备注)
- if (CurrStatus != null)
- {
- string product = GetProduct(CurrStatus.Remark);
- sizeF = g.MeasureString(product, tempfont);
- x = (w - sizeF.Width) / 3;//第二行显示机种信息
- y = h / 2 + (h / 2 - sizeF.Height) / 2;
- g.DrawString(product, tempfont, new SolidBrush(fontcolor), x, (int)(1.2*y));
- }
- else
- {
- sizeF = g.MeasureString(fname, tempfont);
- x = (w - sizeF.Width) / 3;//第二行显示机种信息
- y = h / 2 + (h / 2 - sizeF.Height) / 2;
- g.DrawString(fname, tempfont, new SolidBrush(fontcolor), x, (int)(1.2 * y));
- }
- sizeF = g.MeasureString(fcode, tempfont);
- x = (w - w / 3 - sizeF.Width) / 2;//第一行的第二格填写机台编号
- y = (h / 2 - sizeF.Height) / 2;
- g.DrawString(fcode, tempfont, new SolidBrush(fontcolor), ((w - sizeF.Width) / 3), y/4);
- if (CurrStatus != null && CurrStatus.StatusID > 1)
- {
- Font lenfont = new Font("arail", fontsize, FontStyle.Bold);
- sizeF = g.MeasureString(showtime, lenfont);
- x = (w / 3 - sizeF.Width) / 2 + (w - w / 3);
- y = (h / 2 - sizeF.Height) / 2;
- g.DrawString(showtime, lenfont, new SolidBrush(fontcolor), x, y+10);
- }
- x = (w / 3 - sizeF.Width) / 2 + (w - w / 3);
- if (img != null)
- //g.DrawImage(img, w/8, (int)(1.3*y),82,(h-2*y));
- g.DrawImage(img, w/10, (int)(1.8*y),x, (h -4 * y));
- //g.DrawImage(img, w/8, (int)(1.3*y),40,(h-2*y));
- //g.DrawLine(p, 0, h / 3, w, h / 3);//三分之一处画条横线
- //g.DrawLine(p, w/2, 0, w/2, h / 3);//中间到三分之一高画条竖线
- //g.DrawLine(p, 0, h * 2 / 3, w, h * 2 / 3);
- ////g.DrawLine(p, w / 3, h * 2 / 3, w / 3, h);
- ////g.DrawLine(p, w * 2 / 3, h * 2 / 3, w * 2 / 3, h);
- //int rowh = h / 3;//行高
- //float rowl = (rowh - tempfont.Height) / 2;//子开始的纵坐标
- //sizeF = g.MeasureString(fcode, tempfont);
- //x = (w/2 - sizeF.Width) / 2+w/2;//第一行的第二格填写机台编号
- //g.DrawString(fcode, tempfont, new SolidBrush(fontcolor), x, rowl);
- ////第一行的第二格填写机台厂商
- //fcode = CurrEntity.SupplierFCode;
- //sizeF = g.MeasureString(fcode, tempfont);
- //x = (w / 2 - sizeF.Width) / 2;
- //g.DrawString(fcode, tempfont, new SolidBrush(fontcolor), x, rowl);
- //sizeF = g.MeasureString(fname, tempfont);
- //x = (w - sizeF.Width) / 2;
- //g.DrawString(fname, tempfont, new SolidBrush(fontcolor), x, h / 3 + rowl);
- ////g.DrawString(CurrTime.ToString(), tempfont, new SolidBrush(Color.Black), 5, h / 3 * 2 + rowl);
- //fname = "";// CurrEntity["报警代码"].ToString();
- //if (CurrStatus != null)
- // fname = CurrStatus.AlarmCode;
- //fname =string.IsNullOrEmpty(fname)?"":"ERR:"+fname;
- //sizeF = g.MeasureString(fname, tempfont);
- //x = (w - sizeF.Width) / 2;
- //g.DrawString(fname, tempfont, new SolidBrush(fontcolor), x, h / 3 * 2 + rowl);
- }
- //lable1.BringToFront();
- //lable1.SendToBack();
- this.Text = "测试";
- }
- private string GetProduct(string remark)
- {
- if (string.IsNullOrEmpty(remark))
- return "";
- string[] strs = remark.Split('-');
- return strs[0].Split(' ')[0];
- }
- private void TEntityControl_Paint(object sender, PaintEventArgs e)
- {
- }
- /// <summary>
- /// C# GDI+ 绘制圆角实心矩形
- /// </summary>
- /// <param name="g">Graphics 对象</param>
- /// <param name="rectangle">要填充的矩形</param>
- /// <param name="backColor">填充背景色</param>
- /// <param name="r">圆角半径</param>
- public void FillRoundRectangle(Graphics g, Rectangle rectangle, Color backColor, int r)
- {
- rectangle = new Rectangle(rectangle.X, rectangle.Y, rectangle.Width - 1, rectangle.Height - 1);
- Brush b = new SolidBrush(backColor);
- g.FillPath(b, GetRoundRectangle(rectangle, r));
- }
- /// <summary>
- /// 根据普通矩形得到圆角矩形的路径
- /// </summary>
- /// <param name="rectangle">原始矩形</param>
- /// <param name="r">半径</param>
- /// <returns>图形路径</returns>
- private GraphicsPath GetRoundRectangle(Rectangle rectangle, int r)
- {
- int l = 2 * r;
- // 把圆角矩形分成八段直线、弧的组合,依次加到路径中
- GraphicsPath gp = new GraphicsPath();
- gp.AddLine(new Point(rectangle.X + r, rectangle.Y), new Point(rectangle.Right - r, rectangle.Y));
- gp.AddArc(new Rectangle(rectangle.Right - l, rectangle.Y, l, l), 270F, 90F);
- gp.AddLine(new Point(rectangle.Right, rectangle.Y + r), new Point(rectangle.Right, rectangle.Bottom - r));
- gp.AddArc(new Rectangle(rectangle.Right - l, rectangle.Bottom - l, l, l), 0F, 90F);
- gp.AddLine(new Point(rectangle.Right - r, rectangle.Bottom), new Point(rectangle.X + r, rectangle.Bottom));
- gp.AddArc(new Rectangle(rectangle.X, rectangle.Bottom - l, l, l), 90F, 90F);
- gp.AddLine(new Point(rectangle.X, rectangle.Bottom - r), new Point(rectangle.X, rectangle.Y + r));
- gp.AddArc(new Rectangle(rectangle.X, rectangle.Y, l, l), 180F, 90F);
- return gp;
- }
- }
- }
|